@questlabs/core
Version:
This is the quest SDK
1,929 lines (1,433 loc) • 50.4 kB
Markdown
# QuestSdk
QuestSdk is a javascript development kit which utilizes the quest protocol core apis and provide simple and easy to use methods.
## Installation
If this is a brand new project, make sure to create a `package.json` first with
the [`npm init` command](https://docs.npmjs.com/creating-a-package-json-file).
Installation is done using the
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
```console
$ npm install @questlabs/core
```
Once the package is installed, you can import the sdk using `import` or `require` approach:
Using the import approach for web or mobile projects:
```js
import QuestSdk from "@questlabs/core";
```
Using the require approach for node.js projects:
```js
const QuestSdk = require("@questlabs/core").default;
```
## Initialization in production environment
```ts
// types
interface IConstructor {
apiKey: string;
apiSecret: string;
stagingEnvironment?: boolean;
userAgent?: UserAgent;
entityAuthenticationToken?: string;
entityId?: string;
platform?: string;
}
export type UserAgent = "MOBILE" | "BROWSER" | "SERVER";
// example usage
const questSdk = new QuestSdk({
apiKey: "YOUR_API_KEY",
apiSecret: "YOUR_API_SECRET",
entityId: "YOUR_ENTITY_ID",
});
```
## Initialization in staging environment
```ts
const questSdk = new QuestSdk({
apiKey: "YOUR_API_KEY",
apiSecret: "YOUR_API_SECRET",
entityId: "YOUR_ENTITY_ID",
stagingEnvironment: true,
});
```
## Base class getters and setters
```ts
QuestSdk.setEntityId({ entityId }: ISetEntity): void
QuestSdk.getEntityId(): string | undefined
QuestSdk.setUser({ userId, token }: ISetUser): void
QuestSdk.getUser(): {
userId: string | undefined;
token: string | undefined;
}
QuestSdk.setEnvironment({ stagingEnvironment }: ISetEnvironment): void
QuestSdk.getEnvironment(): {
stagingEnvironment: boolean;
}
QuestSdk.isStagingEnvironment(): boolean
QuestSdk.setUserAgent({ userAgent }: ISetUserAgent): void
QuestSdk.getUserAgent(): UserAgent
QuestSdk.setEntityAuthenticationToken({ token }: ISetEntityAuthenticationToken): void
QuestSdk.getEntityAuthenticationToken(): string | undefined
QuestSdk.setApiKeys({ apiKey, apiSecret }: ISetApiKeys): void
QuestSdk.getApiKeys(): {
apiKey: string;
apiSecret: string;
}
QuestSdk.getBaseUrl(): string
```
## Core Modules
[Entity](#entity), [User](#user), [Badge](#badge), [DappMetric](#dappmetric), [DynamicNFT](#dynamicnft), [EntityTag](#entitytag), [MembershipTier](#membershiptier), [Skill](#skill), [Quest](#quest), [EntityCreditTier](#entitycredittier), [EntityAuthenticationToken](#entityauthenticationtoken) <sup style="color: yellow">New</sup>, [EntityDataContract](#entitydatacontract) <sup style="color: yellow">New</sup>, [EntityFeatureFlag](#entityfeatureflag) <sup style="color: yellow">New</sup>, [EntityPrompt](#entityprompt) <sup style="color: yellow">New</sup>, [GPT](#gpt) <sup style="color: yellow">New</sup>.
## Social Modules
[Twitter](#twitter), [Discord](#discord), [Instagram](#instagram) <sup style="color: yellow">New</sup>
## Abstract Modules
[Xp](#xp) <sup style="color: yellow">New</sup>, [EligibilityCriteria](#eligibilitycriteria), [Reward](#reward)
### Entity
#### Initialization
```ts
import { Entity } from "@questlabs/core/modules/core";
// OR
import { Core } from "@questlabs/core";
const entity = new Entity(questSdk);
// OR
const entity = new Core.Entity(questSdk);
```
#### Methods
1. Create new entity
Used to create a new entity with various details such as name, contracts, description, social media handles, website, and images.
```js
const { entityId, success, error } = await entity.createNewEntity({
name: "Acme Corporation",
contracts: ["0xContract123", "0xContract456"],
openseaSlug: "acme-corp",
description: "A leading technology company.",
chainSource: "ON_CHAIN",
isPrivate: false,
decreaseCreditsAt: 50,
decreaseCreditsFrom: "User567",
website: "https://www.acmecorp.com",
imageUrl: "https://www.acmecorp.com/logo.png",
bannerUrl: "https://www.acmecorp.com/banner.png",
entityURLAlias: "acme",
parentEntityId: "ParentEntity789",
category: "Technology",
});
```
2. Add new custom entity ID
Adds a new custom entity ID by an admin.
```js
const { success, error } = await entity.addNewCustomEntityId({
customPlatformName: "Twitter",
customPlatformId: "123456789",
entityId: "Entity123",
name: "John Doe",
username: "johndoe",
link: "https://twitter.com/johndoe",
accessToken: "your-access-token",
refreshToken: "your-refresh-token",
expiresIn: "3600",
});
```
3. Get all entities
Returns all entities.
```js
const { data, success, error } = await entity.getAllEntities({
page: 1,
limit: 10,
});
```
4. Get entity information
Used to fetch information about a specific entity based on its ID.
```js
const { data, success, error } = await entity.getEntityInfo({
entityId: "entity-123",
});
```
5. Get entity ID for alias:
Retrieves the entity ID for the given alias.
```js
const { data, success, error } = entity.getEntityIdForAlias({
alias: "alias-123",
});
```
6. Get entity ID for custom ID:
Retrieves the entity ID for the given custom ID, platform, and record type.
```js
const { data, success, error } = entity.getEntityIdForCustomId({
customId: "c-123",
platform: "twitter",
recordType: "TWITTER",
});
```
7. Update entity
Used to update an existing entity with new information such as name, description, social media handles, website, and images.
```js
const { success, error } = await entity.updateEntity({
entityId: "Entity123",
name: "Updated Entity Name",
description: "This is the updated description for the entity.",
isPrivate: "false",
decreaseCreditsAt: "50",
decreaseCreditsFrom: "User567",
website: "https://updated-entity.com",
imageUrl: "https://updated-entity.com/image.png",
bannerUrl: "https://updated-entity.com/banner.png",
entityURLAlias: "updated-entity",
});
```
8. Update Entity theme
Updates the current theme of an entity.
```js
const { success, message, error } = await entity.updateEntityTheme({
theme: {
backgroundColor: "blue",
fontFamily: "Hanken Grotesk",
accentColor: "sky-blue",
},
entityId: "e-123",
});
```
9. Get Entity theme
Retrieves the current theme of an entity.
```js
const { theme, success, error } = await entity.getEntityTheme({
entityId: "e-123",
});
```
10. Update Entity plan
Updates the current plan of an entity.
```js
const { success, error } = await entity.updateEntityPlan({
entityId: "e-123",
product: {
name: "FREE",
},
});
```
11. Get users of an entity
Retrieves the users associated with a specific entity for a given user.
```js
const { users, success, error } = await entity.getUsersForEntityForUser({
entityId: "entity-123",
});
```
12. Get all admins
Retrieves all the admins of an entity.
```js
const { data, message, success, error } = await entity.getAllAdmins({
entityId: "e-123",
});
```
13. Remove admin
Removes admin of an entity.
```js
const { message, success, error } = await entity.removeAdmin({
userId: "u-123",
entityId: "e-123",
});
```
14. Add or update social tokens
This function adds or updates social tokens for a specified entity using provided authentication and API credentials.
```js
const { message, success, error } = await entity.addOrUpdateSocialTokens({
recordType: EntityTokenRecordType.TWITTER,
entityId: "Entity123",
authClientId: "your-auth-client-id",
authClientSecret: "your-auth-client-secret",
apiKey: "your-api-key",
apiSecret: "your-api-secret",
authorizationToken: "your-authorization-token",
apiHost: "api.twitter.com",
});
```
15. Get social tokens
This async function retrieves the social tokens of a particulay record type for an entity.
```js
const { data, success, error } = await entity.getSocialTokens({
recordType: "TWITTER",
entityId: "e-1234",
});
```
16. Approve entity creation
Approves the creation of an entity with the specified entity data. Only admins can perform this action.
```js
const { success, error } = await entity.approveEntityCreation({
entityId: "entity-123",
baseName: "Mybase",
baseSymbol: "MEN",
});
```
17. Get all pending entities
Retrieves all pending entities that are yet to be created. Only admins can perform this action.
```js
const { data, success, error } = await entity.getAllPendingEntities();
```
18. Add admin
Adds admin for an entity.
```js
const { message, success, error } = await entity.addAdminToEntity({
email: "test@email.com",
role: "ADMIN",
name: "Jonny",
entityId: "e-1212",
});
```
19. Get api keys
Get or generate new api and secret keys for an entity.
```js
const { data, success, error } = await entity.getOrGenerateNewAPIKey({
entityId: "e-123",
});
```
20. Manually add users to entity
Adds users to an entity.
```js
const { success, error } = await entity.manuallyAddUsersToEntity({
entityId: "entity-123",
userIds: ["user-456", "user-789"],
});
```
21. Get users of an entity
Get users of an entity
```js
const { users, success, error } = await entity.getUsersOfEntity({ entityId: "e-1212" });
```
22. Delete Entity
Allows to delete an entity, can only be performed by the owner.
```js
const response = await entity.deleteEntity({
userId: "u-123",
token: "login-token",
entityId: "e-123",
});
```
### User
Here are the methods of User module and their use cases:
1. Login with wallet
Logs in the user or creates one if it doesn't exist using wallet information.
```js
const { userId, token, newUser, success, error } = await user.loginWithWallet({
entityId: "entity-123",
walletAddress: "0x1234567890abcdef",
signature: "0xabcdef1234567890",
token: "Super secret message",
});
```
2. Login with Google
Logs in the user or creates one if it doesn't exist using Google authentication.
```js
const { userId, token, newUser, success, error } = await user.loginWithGoogle({
code: "google-auth-code",
redirectUri: "https://example.com/callback",
entityId: "entity-123",
});
```
3. Get user details for a given user ID:
Retrieves user details for a given user ID.
```js
const { data, isAdmin, success, error } = await user.getUserDetailsForUserId({
forUserId: "user-123",
});
```
4. Set user information
updates user information for a given user ID.
```js
const { success, error } = await user.setUserInfo({
name: "John Doe",
imageUrl: "https://example.com/johndoe.jpg",
bannerUrl: "https://example.com/johndoe-banner.jpg",
location: "New York City, NY",
expertise: "Web Development",
goals: ["Become a Full Stack Developer", "Learn Machine Learning"],
interests: ["Programming", "Gaming", "Travel"],
about: "I'm a passionate web developer with a love for coding and technology.",
currentWork: "Software Engineer at XYZ Inc.",
funFacts: ["I can solve a Rubik's Cube in under a minute!", "I've visited 10 countries so far."],
role: "Software Engineer",
sector: "Technology",
});
```
5. Create new custom user.
Creates a new custom user with custom user information.
```js
const { userId, newUser, success, error } = await user.createNewCustomUser({
customUserId: "custom-123",
customPlatform: "MyCustomPlatform",
entityId: "entity-123",
});
```
6. Get user details for a given email
Retrieves user details for a given email address.
```js
const { data, isAdmin, success, error } = await user.getUserDetailsForEmail({
email: "user@example.com",
});
```
7. Get user details for a given wallet address
Retrieves user details for a given wallet address.
```js
const { data, isAdmin, success, error } = await user.getUserDetailsForWalletAddress({
walletAddress: "0x1234567890abcdef",
});
```
8. Get user's connected socials:
Retrieves social connections for a given user.
```js
const { data, success, error } = await user.getConnectedUserSocials({
entityId: "entity-123",
});
```
9. Get entities for a user
Retrieves entities associated with a given user.
```js
const { success, error, data, loginAgain, userTokenExpired } = await user.entitesForUser({
page: 1,
limit: 10,
});
```
10. Get admin entities for a user
Retrieves admin entities associated with a given user.
```js
const { data, success, errror } = await user.getAdminEntitiesForUser();
```
11. Set selected admin entity
Updates current admin entity.
```js
const { success, error } = await user.setSelectedAdminEntityId({
entityId: "entity-123",
});
```
12. Send OTP email
Sends an OTP to a given email for login to a particular entity
```js
const { data, success, error } = await user.sendOtpEmail({
email: "testmail@email.com",
entity: "e-12123",
});
```
13. Verify OTP email
Verifies the OTP sent to an email for login to a particular entity
```js
const { userId, token, newUser , success, error } = await user.verifyOtpEmail({
email: "testmail@email.com",
entity: "e-12123"
otp: 112435,
name: "Jon Doe",
});
```
14. Connect wallet
Connects a user's wallet address
```js
const {} = await user.connectWallet({
entityId: "e-1212",
walletAddress: "0x1212331211",
signature: "12121bax1243",
token: "secret message",
userId: "u-121243",
});
```
### Badge
Here are the methods of Badge module and their use cases:
1. Retrieve all badges for a given user
Retrieves all badges for a given user.
```js
const { data, success, error } = await badge.getAllBadgesForUser();
```
2. Get all badges of an entity
Retrieves all badges of a specific entity.
```js
const { data, success, error } = await badge.getAllBadgesForEntity({
entityId: "entity-123",
});
```
3. Get badge information of an entity
Retrieve the badge information for a specific badge associated with an entity.
```js
const { success, error, data, loginAgain, userTokenExpired } = await badge.getBadgeInfoForEntity({
entityId: "entity123",
badgeId: "badge123",
});
```
4. Update badge for a specific entity
Update badge for a specific entity.
```js
const { success, error } = await badge.updateBadgesForEntity({
name: "Achievement Badge",
imageIPFS: "ipfs://your-badge-image-hash",
description: "This badge signifies a major achievement.",
entityId: "Entity123",
skills: "Programming",
userIds: "User456",
endsAt: "2023-12-31",
xp: 100,
airdropEnabled: false,
typeData: "Some type data",
type: "Achievement",
totalCount: "1",
visibility: "Public",
proofType: "Evidence",
});
```
5. Claim a badge for an entity
Claim a badge for an entity.
```js
const { success, error, calculatedDynamicNFT, nftMinted, loginAgain, userTokenExpired } = await badge.claimBadgeForEntity({
entityId: "entity123",
badgeId: "badge123",
addToDynamicNFT: true,
});
```
6. Add users to a badge
Add users to a badge.
```js
const { success, error } = await badge.addUsersToBadge({
entityId: "entity123",
badgeId: "badge123",
userIds: ["user456", "user789"],
});
```
7. Get my created badges
Retrieve the badges created by a specific user
```js
const createdBadges = await badge.getMyCreatedBadges({
userId: "user123",
token: "login-token",
});
```
8. Get user created badges
Get badges created by the user
```js
const { data, success, error } = await badge.getUserCreatedBadges();
```
9. Add badge for entity
Add badge for a specific entity
```js
const { success, error, badgeId, loginAgain, userTokenExpired } = await badge.addBadgeForEntity({
name: "Achievement Badge",
imageIPFS: "ipfs://your-badge-image-hash",
description: "This badge signifies a major achievement.",
entityId: "Entity123",
skills: "Programming",
userIds: "User456",
endsAt: "2023-12-31",
xp: 100,
airdropEnabled: false,
typeData: "Some type data",
type: "Achievement",
totalCount: "1",
visibility: "Public",
proofType: "Evidence",
});
```
10. Get number of badges earned
Get the number of badges a user ha earned for an entity
```js
const { success, error, data, loginAgain, userTokenExpired } = await badge.getNumberOfBadgesEarned();
```
11. Get user earned badges
Get the badges a user has earned for an entity
```js
const { success, error, data, page, totalCount, totalPages, loginAgain, userTokenExpired } = await badge.getUserEarnedBadgesForEntity();
```
11. Add users to badge
Add users to badge
```js
const { success, error, loginAgain, userTokenExpired } = await badge.addUsersToBadge({
badgeId: "b-59f3a52d-92ee-4dae-944e-b271d6135b91",
userIds: ["u-cfd286e2-6bd3-4c8b-a404-ef8b0f5cbc8e"],
});
```
### DappMetric
Here are the methods of DappMetric module and their use cases:
1. Get all dapp metrics
Retrieve all Dapp metrics for a specific entity.
```js
const allDappMetrics = await SDK.meta.dappMetric.getAllDappMetrics({
entityId: "entity123",
userId: "user123",
token: "login-token",
});
```
2. Get dapp metric for a user
Retrieves a specific Dapp metric for a user of an entity.
```js
const dappMetric = await SDK.meta.dappMetric.getDappMetricForUser({
entityId: "entity123",
userId: "user123",
metricId: "metric123",
adminId: "admin123",
token: "login-token",
});
```
3. Increment dapp metric for a user
Increment the value of a specific Dapp metric for a user of an entity.
```js
const incrementedMetric = await SDK.meta.dappMetric.incrementDappMetricForUser({
entityId: "entity123",
userId: "user123",
metricId: "metric123",
count: 5,
adminId: "admin123",
token: "login-token",
});
```
4. Get all dapp metrics of a user
Retrieve all Dapp metrics for a user of an entity.
```js
const allUserDappMetrics =
await SDK.meta.dappMetric.getAllDappMetricsForUser(
entityId: "entity123",
userId: "user123",
adminId: "admin123",
token: "login-token",
);
```
5. Increment multiple dapp metrics for a user
Increment multiple Dapp metrics for a user of an entity.
```js
const incrementedMetrics = await SDK.meta.dappMetric.incrementMultipleMetricsForUser({
entityId: "entity123",
userId: "user123",
metrics: [
{ metricId: "metric1", count: 2 },
{ metricId: "metric2", count: 3 },
],
adminId: "admin123",
token: "login-token",
});
```
### DynamicNFT
Here are the methods of DynamicNFT module and their use cases:
1. Mint dynamic NFT
Mint a dynamic NFT for a specific user of an entity
```js
const { data, success, error } = await dynamicNFT.mintDynamicNFT({
entityId: "entity123",
type: "type1",
forUserId: "forUser123",
});
```
2. Add running xp for a user
Add running XP to the dynamic NFT created for the user of a specific entity
```js
const { success, error, loginAgain, userTokenExpired } = await dynamicNft.addRunningXP({
xp: 10000,
title: "TITLE_FOR_INCREMENTING",
});
```
3. Get my dynamic NFTs
Retrieve the dynamic NFTs owned by a user
```js
const { data, success, error } = await dynamicNFT.getMyDynamicNFTs();
```
4. Get my dynamic NFT details for an entity
Retrieve the dynamic NFT details for a specific entity owned by a user.
```js
const { data, entity_data, success, error } = await dynamicNFT.getMyDynamicNFTDetailsForEntity({
entityId: "entity123",
});
```
5. Get XP for user
Get XP for a user of an entity
```js
const { data, success, error } = await dynamicNft.getXpForUser({ entityId: "e-1212", userId: "u-12121" });
```
6. Get XP for users
Get XP for multiple users of an entity
```js
const { data, success, error } = await dynamicNft.getXpForUsers({
entityId: "e-1212",
userIds: ["u-12121", "u-9090"],
});
```
7. Get XP for entity
Get XP for an entity
```js
const { data, success, error } = await dynamicNft.getXpForEntity({
entityId: "e-1212",
});
```
8. Get XP for entities
Get XP for multiple entities
```js
const { data, success, error } = await dynamicNft.getXpForEntities({
entityIds: ["e-1212", "e-9090"],
});
```
9. Recalculate user's dynamic NFT
Recalculate the dynamic NFT for a specific entity owned by a user.
```js
const { data, success, error } = await dynamicNFT.recalculateUsersDynamicNFT({
entityId: "entity123",
userId: "user123",
});
```
10. Get all themes for an entity
Retrieve all themes for a specific entity.
```js
const { data, success, error } = await dynamicNFT.getAllThemesForEntity({
entityId: "entity123",
});
```
11. Add new dynamic theme for an entity
Add a new dynamic theme for a specific entity.
```js
const { themeId, success, error } = await dynamicNFT.addNewThemeForEntity({
membershipTier: 2,
title: "Gold Membership",
price: "49.99 USD",
entityId: "Entity123",
backgroundImageIPFS: "your-background-image-hash",
horizontalLogoImageIPFS: "your-horizontal-logo-image-hash",
squareLogoImageIPFS: "your-square-logo-image-hash",
backgroundColor: "#F0F0F0",
accentColor1: "#FFA500",
accentColor2: "#008000",
metadataIPFS: "your-metadata-hash",
});
```
12. Get theme details for an entity
Retrieve the details of a specific theme for a given entity.
```js
const { data, success, error } = await dynamicNFT.getThemeDetailsForEntity({
entityId: "entity123",
themeId: "theme123",
});
```
13. Update theme for an entity
Update the details of a specific theme for a given entity.
```js
const { success, error } = await dynamicNFT.updateThemeForEntity({
themeId: "t-1212",
membershipTier: 2,
title: "Gold Membership",
price: "49.99 USD",
entityId: "Entity123",
backgroundImageIPFS: "your-background-image-hash",
horizontalLogoImageIPFS: "your-horizontal-logo-image-hash",
squareLogoImageIPFS: "your-square-logo-image-hash",
backgroundColor: "#F0F0F0",
accentColor1: "#FFA500",
accentColor2: "#008000",
metadataIPFS: "your-metadata-hash",
});
```
14. Delete theme for an entity
Delete a specific theme for a given entity.
```js
const { success, error } = await dynamicNFT.deleteThemeForEntity({
entityId: "entity123",
themeId: "theme123",
});
```
15. Set default theme for an entity
Set the default theme for a given entity.
```js
const { success, error } = await dynamicNFT.setDefaultThemeForEntity({
entityId: "entity123",
themeId: "theme123",
});
```
16. Get user user xp leaderboard rank
Retrives the user's rank from the xp leaderboard
```js
const { success, error, data, loginAgain, userTokenExpired } = await dynamicNft.getUserXpLeaderboardRank();
```
19. Get user user xp leaderboard
Retrives the xp leaderboard
```js
const { success, error, data, page ,totalCount, totalPages, loginAgain, userTokenExpired } = await dynamicNft.getUserXpLeaderboard();
```
18. Get user user xp history
Retrives the history of xp increments for a user
```js
const { success, error, data, page, totalCount, totalPages, loginAgain, userTokenExpired } = await dynamicNft.getUserXpHistory();
```
### EntityTag
Here are the methods of EntityTag module and their use cases:
1. Get all tags for an entity
Retrieve all tags for a specific entity.
```js
const { data, success, error } = await entityTag.getAllTagsForEntity({
entityId: "entity123",
});
```
2. Add tag for an entity
Add a tag for a specific entity.
```js
const { data, success, error } = await entityTag.addTagForEntity({
entityId: "entity123",
tagName: "Tag 1",
description: "This is tag 1",
});
```
3. Update tag of an entity
Update a tag for a specific entity.
```js
const { data, success, error } = await entityTag.updateTagForEntity({
tagId: "tag123",
tagName: "Updated Tag 1",
description: "This is the updated tag 1",
entityId: "entity123",
});
```
4. Delete tag of an entity
Delete a tag for a specific entity.
```js
const { success, error } = await entityTag.deleteTagForEntity({
entityId: "entity123",
tagId: "tag123",
});
```
5. Get entity tags for a user
Retrieve tags associated with a specific entity for a given user, on behalf of another user.
```js
const { data, success, error } = await entityTag.getEntityTagsForUser({
entityId: "entity123",
forUserId: "forUser123",
});
```
6. Add entity tag for a user
Add a user to an entity tag.
```js
const { data, success, error } = await entityTag.addEntityTagForUser({
entityId: "entity123",
forUserId: "forUser123",
tagId: "tag123",
});
```
7. Remove entity tag for a user
Remove a user from an array of users associated with an entity tag.
```js
const { success, error } = await entityTag.removeEntityTagForUser({
entityId: "entity123",
tagId: "tag123",
forUserId: "forUser123",
});
```
### MembershipTier
Here are the methods of MembershipTier module and their use cases:
1. Get all membership tiers of entity
Retrieve all membership tiers of an entity.
```js
const { data, success, error } = await membershipTier.getAllMembershipTiersOfEntity({
entityId: "entity123",
page: 1,
limit: 10,
});
```
2. Get membership tier details for an entity
Retrieve membership tier details of an entity.
```js
const { data, success, error } = await membershipTier.getMembershipTierDetailsForEntity({
entityId: "entity123",
memberhipTier: 1,
});
```
3. Add new membership tier for an entity
Add a new membership tier for an entity.
```js
const { success, error } = await membershipTier.addNewMembershipTierForEntity({
xpThreshold: 5000,
membershipTier: 2,
imageIPFS: "your-membership-tier-image-hash",
description: "Unlock exclusive benefits with our Gold Membership.",
entityId: "Entity123",
});
```
4. Update membership tier for an entity
Update the xpThreshold requirements of a specific membership tier for an entity.
```js
const { success, error } = await membershipTier.updateMembershipTierForEntity({
membershipTier: 2,
xpThreshold: 1000,
entityId: "Entity123",
});
```
5. Delete membership tier for entity
Delete a specific membership tier for an entity.
```js
const { success, error } = await membershipTier.deleteMembershipTierForEntity({
entityId: "entity123",
membershipTier: 1,
});
```
### Skill
Here are the methods of Skill module and their use cases:
1. Get all skills
Retrieve all skills associated with an entity.
```js
const { data, success, error } = await skill.getAllSkills({
entityId: "entity123",
});
```
2. Get skill details
Retrieve the details of a specific skill.
```js
const { data, success, error } = await skill.getSkillDetails({
skillId: "skill123",
});
```
3. Add new skill
Add a new skill for an entity.
```js
const { skillId, success, error } = await skill.addNewSkill({
name: "New Skill",
description: "This is a new skill",
entityId: "entity123",
});
```
4. Add multiple new skills
Add multiple new skills for an entity.
```js
const { skillIds, success, error } = await skill.addMultipleNewSkills({
skills: [
{ name: "Skill 1", description: "This is skill 1" },
{ name: "Skill 2", description: "This is skill 2" },
],
entityId: "entity123",
});
```
### Quest
Here are the methods of Quest module and their use cases:
1. Get all Quests
Fetches all the quests with optional params for pagination.
```js
const { data, success, error } = await quest.getAllQuests({
page: 1,
limit: 10,
});
```
2. Get all quests of an entity
Fetches all the quests of a specific entity with optional pagination.
```js
const { data, success, error } = await quest.getAllQuestsForEntity({
entityId: "e-101",
page: 1,
limit: 10,
});
```
3. Get quest details.
Fetches the details of a quest with stats of the user retrieving it, userId is optional.
```js
const {
success,
error,
data,
allCriteriasCompleted,
claimStatus,
completedCriteriasPercentage,
eligibilityData,
rewards,
session,
totalCriteriasCompleted,
referralCode,
totalClaimed,
loginAgain,
userTokenExpired,
} = await quest.getQuestDetails({
entityId: "e-010",
questId: "q-202",
});
```
4. Create Quest.
Creates a quest for users of an entity to complete and get rewards.
```ts
const eligibilityCirterias: ICreateQuestEligibilityCriteria = [];
eligibilityCirterias.push(eligibilityCriteria.createUserInputText({
title: "ENter your name",
xp: 10,
frequency: EligibilityCriteriaFrequencyConst.ONCE,
effort: EligibilityCriteriaEffortConst.E1,
importance: EligibilityCriteriaImportanceConst.I1,
}));
const rewards: ICreateQuestReward = [];
rewards.push(reward.createXp({
xp: 10,
}))
const { id, success, error, loginAgain, userTokenExpired } = await quest.createQuest({
title: "Epic Adventure Quest",
entityId: "Entity123",
description: "Embark on a journey filled with challenges and rewards!",
imageURL: "https://example.com/quest-image.jpg",
endsAt: new Date("2023-12-31T23:59:59Z"),
hasReferral: true,
referralXP: 50,
theme: {
background: "#F0F0F0",
textColor: "#333333"
},
isPrivate: false
eligibilityCirterias: eligibilityCirterias,
rewards: rewards,
});
```
5. Update Quest
Updates a quest of an entity.
```js
const { success, error } = await quest.updateQuest({
entityId: "e-123",
questId: "q-123",
title: "Updated quest title",
});
```
6. Delete quest
Deletes a quest.
```js
const { success, error, message } = await quest.deleteQuest({
entityId: "e-123",
questId: "q-123",
});
```
7. Verify quest criteria for user
Verifies a criteria for a user whether they have completed or not.
```js
const { success, error, loginAgin, status } = await quest.verifyQuestCriteriaForAUser({
entityId: "e-123",
questId: "q-123",
criteriaId: "c-1212",
answer: ["My name is Jon"],
});
```
8. Verify multiple quest criterias for user
Verifies multiple criteria for a user whether they have completed or not.
```js
const { success, error, loginAgin, status } = await quest.verifyMultipleQuestCriteriaForAUser({
entityId: "e-123",
questId: "q-123",
criterias: [
{
criteriaId: "c-1212",
answer: ["My name is Jon"],
},
{
criteriaId: "c-090",
answer: [20],
},
],
});
```
9. Claim quest rewards
Allows user to claim the rewards of a quest if they have completed all the eligibility criterias.
```js
const { success, error } = await quest.claimQuestRewards({
questId: "q-123",
entityId: "e-123",
});
```
10. Get Quest Summary
Get quest summary details.
```js
const { summary, success, error } = await quest.getQuestSummary({
entityId: "e-123",
questId: "q-123",
});
```
11. Get referral code of user for quest.
Get referral code for the user for a particular quest, which can be used to share with others.
```js
const { referralCode, success, error } = await quest.getOrSetNewReferralCodeForQuestAndUser({
entityId: "e-123",
questId: "q-123",
});
```
12. Get referral leaderboard.
Get leaderboard for all the referrals.
```js
const { data, success, error } = await quest.getReferralLeaderboard({
entityId: "e-123",
questId: "q-123",
});
```
13. Get quest submissions
Get quest user submission details with referrals
```js
const { data, success, error } = await quest.getQuestSubmissions({ questId: "q-121", entityId: "e-1212" });
```
14. Create metric quest
Create metric quest which doesn't have any criterias other than metric
```js
const { success, error, questId, loginAgain, userTokenExpired } = await quest.createMetricQuest({
metric: {
metricId: "daily_login",
metricType: "threshold",
threshold: 30
},
autoClaimRewards: true,
repeatRewardsBasedOnMetricCount: false,
title: "30 days login",
rewards: [
{
type: "REWARD_XP",
xp: 10,
}
],
description: "Login for 30 days",
});
```
15. Get metric quest details
Get metric quest details
```js
const { success, error, data, loginAgain, userTokenExpired } = await quest.getMetricQuestDetails({
questId: "q-893aa9ae-d479-4e89-80f0-7a99a8c50b96",
entityId: "e-9946bedf-3c65-4111-b296-ca6fd2a3a738"
});
```
### EntityCreditTier
Here are the methods of EntityCreditTier module and their use cases:
1. Add Credit Tier for Entity
Add a new credit tier for an entity.
```js
const { data, success, error } = await entityCreditTier.addCreditTierForEntity({
creditsTierId: "tier123",
creditsTierName: "New Tier",
price: 10,
creditsAmount: 100,
extraCreditsAmount: 50,
recurringTimePeriod: "MONTHLY",
entityId: "entity123",
});
```
2. Update Credit Tier for Entity
Update an existing credit tier for an entity.
```js
const { data, success, error } = await entityCreditTier.updateCreditTierForEntity({
creditsTierId: "tier123",
price: 15,
entityId: "entity123",
});
```
3. Get credit tiers for entity
Fetches the credit tiers info of an entity.
```js
const { data, success, error } = await entityCreditTier.getCreditTiersForEntity({
entityId: "entity123",
});
```
4. Get credit info for a user
Fetches the credit info for a user of an entity.
```js
const { data, success, error } = await entityCreditTier.getCreditInfoForUser({
entityId: "entity123",
forUserId: "user123",
});
```
5. Buy credit for entity
Purchase credits for an entity.
```js
const { success, error } = await entityCreditTier.buyCreditsForEntity({
creditsTierId: "tier123",
intentId: "intent123",
entityId: "entity123",
});
```
6. Buy Credits for User
Purchase credits for a user.
```js
const { success, error } = await entityCreditTier.buyCreditsForUser({
creditsTierId: "tier123",
intentId: "intent123",
entityId: "entity123",
forUserId: "user123",
});
```
7. Decrement credits for a user
Decrements credits of a user.
```js
const { success, error } = await entityCreditTier.decrementCreditsForUser({
creditsAmount: 50,
entityId: "entity123",
forUserId: "user123",
});
```
8. Decrement credits for a Entity
Decrements credits of a Entity.
```js
const { success, error } = await entityCreditTier.decrementCreditsForEntity({
creditsAmount: 50,
entityId: "entity123",
});
```
9. Create Payment Intent for Entity
Create a payment intent for an entity.
```js
const { data, success, error } = await entityCreditTier.createPaymentIntentForEntity({
entityId: "entity123",
cardData: {
email: "user@example.com",
name: "John Doe",
address: {
country: "US",
postal_code: 12345,
city: "New York",
state: "NY",
line1: "123 Main St",
line2: "Apt 4B",
},
},
intentData: {
paymentMethodId: "paymentMethod123",
amount: 100,
currency: "USD",
},
});
```
10. Approve payment for entity
Approves a stripe payment using intentId created by createPaymentIntentForEntity
```js
const { sucess, error } = await entityCreditTier.approvePaymentForEntity({
entityId: "e-121",
intentId: "e-121iklj",
});
```
### EntityAuthenticationToken
Here are the methods of EntityAuthenticationToken module and their use cases:
1. Create Token
Create a new authentication token for a user associated with an entity.
```js
const { data, success, error } = await entityAuthenticationToken.createToken({
entityId: "entity123",
});
```
2. Update Token
Update the authentication token for a user associated with an entity.
```js
const { data, success, error } = await entityAuthenticationToken.updateToken({
entityId: "entity123",
expiry: "2023-12-31T23:59:59Z",
});
```
3. Refresh Token
Refresh the authentication token for a user associated with an entity.
```js
const { data, success, error } = await entityAuthenticationToken.refreshToken({
entityId: "entity123",
authenticationToken: "your_existing_token_here",
});
```
4. Delete Token
Delete the authentication token for a user associated with an entity.
```js
const { data, success, error } = await entityAuthenticationToken.deleteToken({
entityId: "entity123",
});
```
5. Get Token
Get the authentication token for a user associated with an entity.
```js
const { data, success, error } = await entityAuthenticationToken.getToken({
entityId: "entity123",
requestOrigin: "https://yourapp.com",
});
```
### EntityDataContract
Here are the methods of Twitter module and their use cases:
1. Add new data contract for entity
Add a new data contract for an entity.
```js
const { datasetId, success, error } = await entityDataContract.addNewDataContractForEntity({
name: "New Data Contract",
description: "This is a new data contract",
entityId: "entity123",
source: "Source Name",
fields: [
{
name: "Field 1",
description: "Description for Field 1",
validationRules: {
type: "string",
required: true,
minLength: 2,
maxLength: 50,
},
},
],
tags: ["tag1", "tag2"],
});
```
2. Get data contract by ID
Get a data contract by ID for an entity.
```js
const { data, success, error } = await entityDataContract.getDataContractByIdForAnEntity({
entityId: "entity123",
dataContractId: "dataContract123",
});
```
3. Get all data contracts for an entity
Get all data contracts associated with an entity.
```js
const { data, success, error } = await entityDataContract.getAllDataContractsForAnEntity({
entityId: "entity123",
});
```
4. Update data contract for an entity
Update a data contract for an entity.
```js
const { success, error } = await entityDataContract.updateDataContractForEntity({
entityId: "entity123",
name: "Updated Data Contract",
description: "This is an updated data contract",
source: "Updated Source",
});
```
5. Delete data contract for entity
Delete a data contract for an entity.
```js
const { success, error } = await entityDataContract.deleteDataContractForEntity({
entityId: "entity123",
dataContractId: "dataContract123",
});
```
6. Chat with data contract
Chat with a data contract for an entity.
```js
const { data, success, error } = await entityDataContract.chatWithDataContractForEntity({
entityId: "entity123",
dataContractId: "dataContract123",
userInput: "User input text",
isInternal: true,
});
```
7. Fetch fields from google sheets
Fetch fields from a Google Sheets link for a data contract.
```js
const { datasetId, success, error } = await entityDataContract.fetchFieldsFromGoogleSheets({
entityId: "entity123",
googleSheetLink: "https://docs.google.com/spreadsheets/d/your-sheet-id",
});
```
8. Auto generate description
Auto-generate a description for a data contract based on fields.
```js
const { res, success, error } = await entityDataContract.autoGenerateDescription({
entityId: "entity123",
dataContractId: "dataContract123",
fields: [
{
name: "Field 1",
description: "Description for Field 1",
validationRules: {
type: "string",
required: true,
},
},
],
});
```
### EntityFeatureFlags
Here are the methods of EntityFeatureFlags module and their use cases:
1. Get all feature flags for an entity
Retrieve all feature flags associated with an entity.
```js
const { data, success, error } = await entityFeatureFlag.getAllFeatureFlagsForEntity({
entityId: "entity123",
});
```
2. Add new feature flag for entity
Add a new feature flag for an entity.
```js
const { success, error } = await entityFeatureFlag.addNewFeatureFlagForEntity({
entityId: "entity123",
flagName: "NewFeatureFlag",
description: "This is a new feature flag",
isEnabled: true,
});
```
3. Toggle feature flag for entity
Toggle the status of a feature flag for an entity.
```js
const { success, error } = await entityFeatureFlag.toggleFeatureFlagForEntity({
entityId: "entity123",
flagName: "FeatureFlagName",
});
```
4. Terminate feature flag
Terminate a feature flag for an entity.
```js
const { success, error } = await entityFeatureFlag.terminateFeatureFlagForEntity({
entityId: "entity123",
flagName: "FeatureFlagName",
});
```
5. Get all feature flags stream
Get a stream of all feature flags for an entity.
```js
const eventSource = entityFeatureFlag.getAllFeatureFlagsStream({
entityId: "entity123",
});
```
### EntityPrompt
Here are the methods of EntityPrompt module and their use cases:
1. Add entity prompt
Add a new entity prompt for a specific use case.
```js
const { success, error, usecase } = await entityPrompt.addEntityPrompt({
entityId: "entity123",
usecase: "Usecase1",
actualPrompt: "Please provide your name.",
});
```
2. Generate prompt response by usecase
Generate a prompt response for a specific use case.
```js
const { success, error, data } = await entityPrompt.generatePromptResponseByUsecase({
entityId: "entity123",
usecase: "Usecase1",
message: "John Doe",
});
```
3. Update entity prompt
Update an existing entity prompt for a specific use case.
```js
const { success, error, usecase } = await entityPrompt.updateEntityPrompt({
entityId: "entity123",
usecase: "Usecase1",
actualPrompt: "Please provide your updated name.",
});
```
### GPT
Here are the methods of GPT module and their use cases:
1. Create Text Embedding for Entity
Create text embeddings for an entity.
```js
const { embedding, success, error } = await gpt.createTextEmbeddingForEntity({
embeddingText: "This is a sample text for embedding",
entityId: "entity123",
});
```
2. Make Prompt Request with Embedding
Make a prompt request with text embedding for an entity.
```js
const { data, success, error } = await gpt.makePromptRequestWithEmbedding({
input: "Generate a response based on this input.",
entityId: "entity123",
});
```
### Twitter
Here are the methods of Twitter module and their use cases:
1. Connect twitter
Allows a user to connect their twitter account to an entity.
```js
const response = await SDK.social.twitter.connect({
twitterRedirectCode: "redirect-code-124",
redirectUri: "http://localhost:3000/profile/twitter",
entityId: "e-123",
userId: "u-124",
token: "login-token-123",
});
```
2. Disconnect twitter
Disconnects the user's twitter account from an entity.
```js
const response = await SDK.social.twitter.disconnect("e-123", "u-124", "login-token-123");
```
### Discord
Here are the methods of Discord module and their use cases:
1. Connect discord
Allows a user to connect their discord account to an entity.
```js
const response = await SDK.social.discord.connect({
discordRedirectCode: "redirect-code-124",
redirectUri: "http://localhost:3000/profile/discord",
entityId: "e-123",
userId: "u-124",
token: "login-token-123",
});
```
2. Disconnect discord
Disconnects the user's discord account from an entit