@faiber/ faiber- profile
剖面,原子部分更新,动态属性,地理记录,关系,媒体,搜索,可信赖的服务,和剖面日志.
安装
npm install @faiber/faiber-profile
配置
import { FaiberClient, MemoryTokenProvider } from "@faiber/sdk-core";
import { ProfileApi } from "@faiber/faiber-profile";
const tokens = new MemoryTokenProvider();
const client = new FaiberClient("profile", {
domains: { profile: process.env.FAIBER_PROFILE_URL! },
tokenProvider: tokens,
axios: { timeout: 15_000, withCredentials: true },
});
const api = new ProfileApi(client);
const updated = await api.updateProfile(userId, {
first_name: { en: "Ava", fa: "آوا" },
phone: "+989121234567",
properties: { workout_plan: plan, membership },
});
console.log(updated.data.data.profile);
完全能力
这个软件包从配置服务中暴露出239个已注册的操作. 通用工作流程有简洁的方法 api;每个已注册后端路由在 api.operations。生成的操作输入、查询、响应、路径、动词和许可合同从 operations.types。 。 。 .
| 区域 | 业务 | HTTP 方法 |
|---|---|---|
ai-summary | 20国 | GET, (中文(简体) ), PATCH, (中文(简体) ), POST, (中文(简体) ), PUT |
campaign | 页:1 | GET, (中文(简体) ), POST |
city | 第8条 | DELETE, (中文(简体) ), GET, (中文(简体) ), PATCH, (中文(简体) ), POST, (中文(简体) ), PUT |
country | 第8条 | DELETE, (中文(简体) ), GET, (中文(简体) ), PATCH, (中文(简体) ), POST, (中文(简体) ), PUT |
custom-type | 页:1 | DELETE, (中文(简体) ), GET, (中文(简体) ), PATCH, (中文(简体) ), POST |
education | 页:1 | GET, (中文(简体) ), POST, (中文(简体) ), PUT |
fitness | 第32条 | GET, (中文(简体) ), POST, (中文(简体) ), PUT |
integration | 2个 | GET |
lifecycle | 24个 | DELETE, (中文(简体) ), GET, (中文(简体) ), POST, (中文(简体) ), PUT |
log-action | 3个 | POST |
logger | 2个 | GET |
option | 页:1 | GET, (中文(简体) ), POST |
profile | 59国 | DELETE, (中文(简体) ), GET, (中文(简体) ), PATCH, (中文(简体) ), POST, (中文(简体) ), PUT |
profile-property | 第8条 | DELETE, (中文(简体) ), GET, (中文(简体) ), PATCH, (中文(简体) ), POST, (中文(简体) ), PUT |
profile-search | 3个 | POST |
province | 第8条 | DELETE, (中文(简体) ), GET, (中文(简体) ), PATCH, (中文(简体) ), POST, (中文(简体) ), PUT |
referral | 第7条 | DELETE, (中文(简体) ), GET, (中文(简体) ), POST, (中文(简体) ), PUT |
relation | 10个 | DELETE, (中文(简体) ), GET, (中文(简体) ), POST, (中文(简体) ), PUT |
router | 3个 | GET |
session | 页:1 | GET, (中文(简体) ), PATCH, (中文(简体) ), PUT |
setting | 2个 | GET, (中文(简体) ), POST |
survey | 2个 | GET, (中文(简体) ), POST |
trusted-service | 第12条 | DELETE, (中文(简体) ), GET, (中文(简体) ), PATCH, (中文(简体) ), POST, (中文(简体) ), PUT |
updateProfile 发送一个原子 PATCH /api/v1/profile/{uuid}。输出地保持不变。 在被钉住的一般补丁处理器, job: null 清除任务; 其它无效的平面字段清晰地解析 null 作为忽略。 使用 educationInformation 明确清理其教育/移交/就诊领域。 平衡,入场状态,角色,ID,和外观对象不能大规模指定. 补丁模型确实接受 status, (中文(简体) ), employee_type,以及 freemium_session_limit 下级 profile:update启用 uploadAvatar 国内流离失所者的作用.
学生平衡和教育
简介全文如下: byRole("student"),显示顶层 account_balance 财务报告和审定财务报表 wallet_balance 从办公室同步快照. null 表示未知;它不是零。 列表配置文件不会载入财务历史 .
const educations = (await api.listEducations()).data.data; // EducationOption[]: { id, name }
const dependencies = (await api.educationDependencies()).data.data;
await api.educationInformation(idpUserUuid, {
education_id: educations[0].id,
attendance_mode: dependencies.attendance_mode[0].id,
level: "beginner",
referral_source: dependencies.referral_source[0]?.id ?? null,
referrer_uuid: referrerUserId,
description: "Learner notes",
});
await api.customTypes.create({ name: "job", value_type: "select", options: ["بیکار"] });
educationInformation 支持和呼叫 PUT /api/v1/profile/update/education-information/{uuid}。路径必须是 IDP 用户 UUID,而不是配置文件记录ID。 整个更新在保存前被验证. (a) 遗漏未变; null 释出. 出席情况 online 或者说 in_person级别接受非空 最多64个Unicode字符的字符串,而不是一个数字或固定音符。 转录源是一个来自依赖响应的活性代码;转录源UUID必须识别一个已经存在的其他用户. 描述仅限于一万个字符. 教育必须是积极的查询身份证.
GET /api/v1/education 财务报告和审定财务报表 /education/dependencies 需求 profile:read教育的创造和更新 profile:update。管理员可以用 api.education.create({name})。迁移会恢复表格和可撤销的列,但无法恢复被旧迁移删除的行;从备份中恢复任何历史目录,而不是发明ID.
认证和授权
使用一个 TokenProvider 以转发已签名用户的 Bearer 令牌,或启用 withCredentials 用于安全的 Http 唯一的饼干会话。 每个行动的JSDoc都载有已宣布的国内流离失所者许可。 大多数 CRUD 路由会使用由可信任的 IDP 网关提供的身份头; 权限说明导出元数据, 并且不会执行处理器内部的权限 。 简要路线还验证了每次接听国内流离失所者的Bearer/cookie证书。 内部健身信贷/礼品业务需要其单独配置的服务 " 熊鼠 " 标志。 SDK不嵌入 API 密钥,证书,本地主机 URL,沙盒主机,或生产主机.
投入、询问、答复和运输
所有方法都返回完整的Axios响应,包括状态,头,以及请求ID. 请求机构和查询对象被命名为导出接口. 配置列表页码使用 page 财务报告和审定财务报表 per_page; 过滤器使用诸如 filter[role] 财务报告和审定财务报表 filter[status]。摘要页还使用其输出的查询类型。 标准 Axios 请求选项、信头、超时、适配器、拦截器和 AbortSignal 取消被支持为最后参数.
一般性的REST资源得到能力保障。 调用未注册的遗留方法 UnsupportedOperationError 在发送请求之前, 而不是生成后端 405。 。 。 .
媒体和指挥部的回应
api.operations.profileAvatarShowGetApiV1ProfileMediaUuidAvatar(ownerUuid, {key}), (中文(简体) ),
profileAvatarShowGetApiV1ProfileUuidAvatar, (中文(简体) ), profileImageShowGet,以及
profileMediaShowGet 返回原始二进制字节( e)ArrayBuffer | Uint8Array),与
axios 响应头的服务内容类型和缓存策略。 他们 key 查询
需要时间。 形象和内容是公开的;私营媒体需要国内流离失所者
认证。 无效的所有者前缀或 traversal return 403; 缺少的对象
返回 404 键.
上传接受多部分 file 字段,包含 JPEG、PNG 或 WebP 最多 5 MiB.
呼叫者必须拥有目标用户 UUID 或者有 profile:update上传成功
返回时 {url, key}; 不支持的类型返回 415, 缺少/ 空文件 422, 超大小
和未配置的存储 503 .
财产更新返回 updated_keys 财务报告和审定财务报表 array_item_changes (增加/删除的身份证)
而不是完整的简介。 地址、父链接、删除和
以空对象恢复命令一般确认成功。 散装父
查找返回存储的链接行, 并同时使用 IDP 用户 UUID; 块地址解析
用于划出 profile_id 是一个单独的配置 UUID.
错误和取消
try {
await api.client.get("/health", undefined, { signal: AbortSignal.timeout(5_000) });
} catch (error) {
// Axios errors retain response.status and the service error body.
}
使用 @faiber/faiber-ts-sdk 当一个应用程序需要多个具有一个配置的Faiber服务时.
当前空间成员名称
在从任务中获取合格成员ID后, 请拨打 profile.resolvePeople({ user_ids }) 每批1至200个UUID。 反应中包含有活性沙盒剖面图,有英文/波斯文名称和克通克文 user_id;电子邮件和电话被扣。 任何匹配或重复的名字在指派前都无需澄清。 要求数 profile:lookup 和标准认证客户端; 无效批次返回 Axios 400 响应。 请求选项支持取消和超时 .
个人资料包括 job,一个无效的职称。 过 { job: "Software engineer" } 改为 sdk.profile.personalInformation(userId, ...); 通过 { job: null } 来清理它。 选择 job 保存已保存的值。 概况细节和清单答复还包括: job,则一般配置补丁操作接受.
动态剖面过滤器
简介清单曝光 birthday, (中文(简体) ), created_at,以及 referrer_uuid裁判员
字段持有推荐用户的 IDP UUID 。 要设置它,打电话
api.educationInformation(userId, { referrer_uuid: referrerUserId })。通过
null 以清除裁判.
使用 api.operations.profileSearchSearchPost({ search: "Ava", include: ["properties"] })
对于合并搜索终点。 每一次袭击都包括 core,包括三个
列出上面的字段。 这个 include 数组选择可选 properties 财务报告和审定财务报表
services 节。 把它还给我.
listProfiles 和所有角色列表操作查询,包括
ProfileStudentIndexGetQuery,接受括号过滤器,重复日期范围
sort. 偏爱 filterProfiles 用于输入的运算符和 JSON 值:
const response = await api.filterProfiles({
filters: [
{ path: 'role', op: 'in', value: ['student', 'customer'] },
{ path: 'core.account_balance', op: 'lt', value: 0 },
{ path: 'properties.owner', op: 'in', value: ['supporter-user-uuid'] },
{ path: 'services.office.sync-user.enrollments.freemium_sessions', op: 'gte', value: 1 },
],
sort: [{ path: 'core.created_at', dir: 'desc' }],
page: 1,
per_page: 20,
});
const profiles = response.data.data.profiles;
这种方法需要 profile:read 并使用正常认证的 Faiber
客户端。 它返回Axios的全部响应 并接受取消信号,
标题和超时作为第二个参数. 无效条款、日期或无法使用
配置包含 HTTP 400 的 Axios 错误的字段拒绝 .
使用 role (或 core.role以过滤配置文件-作用名称: eq 匹配一个角色,
in 匹配任何提供的角色,以及 neq 不包括带有这种作用的简介.
分开 role 投入仍然接受一个单一的作用;如果结合条款,
所有限制都一起适用。 角色名称不限于学生使用的案例.
使用 core.<column>, (中文(简体) ), properties.<key>[.<nested-field>],或
services.<service-key>.<event-name>.<nested-field> 路径。 属性必须是
列表中的活动、可过滤和可见; 信任的服务必须是活动的及其
列表中可见的事件。 嵌入式有效载荷阵列匹配候选元素. 条款
已安放; 使用 json_contains 带有数组/对象结构的字段
必须匹配同一嵌入式记录。 运算符是 eq, (中文(简体) ), neq, (中文(简体) ), gt, (中文(简体) ), gte, (中文(简体) ), lt, (中文(简体) ),
lte, (中文(简体) ), in, (中文(简体) ), contains, (中文(简体) ), exists 财务报告和审定财务报表 json_contains。缺失数据得到满足
neq; 数组排序使用最小的 JSON 候选 .
await api.operations.profileStudentIndexGet({
'filter[birthday][]': ['2000-01-01', '2010-12-31'],
'filter[created_at][]': ['2026-01-01', '2026-10-07'],
'filter[gender]': 'female',
sort: '-core.created_at',
});
范围需要两个被命令的终点;一个空字符串会留下绑定的开口.
只约会创建时间的上限包括了整个一天. sort 接受
逗号分隔路径,与 - 为下降。 应用概念,例如:
double_debt,支持者 owner 财务报告和审定财务报表 work_id 需要存储配置
属性或它们实际信任的服务路径; SDK 不计算它们.
这些能力需要支持动态列表过滤器的服务版本.
健身辅导
这个 operations.fitness* 方法包括接收草稿、产品报价、付费订单、教练任务、计划修订、目录、设置、通知和审判救赎。 导出 FitnessIntake, (中文(简体) ), FitnessPlan, (中文(简体) ), FitnessOrder, (中文(简体) ), FitnessRevision 和礼物类型 描述电线模型.
const self = await api.operations.fitnessMeGet();
const saved = await api.operations.fitnessSaveSettingsPut({
model_ref: modelRef, stt_model_ref: speechInputRef, tts_model_ref: speechOutputRef,
expected_version: currentVersion,
});
该服务授权体育馆会员,管理者,被分配的教练员和订单所有权独立于配置编辑. 需要提供/进口行政服务 fitness:admin。设置和草稿使用乐观的版本; stale changes return 409. 采购要求稳定 idempotency_key,以及计划任务/建议书的使用 base_revision_id受托的礼品管理和聊天-信用储备/套接字操作是服务器专用的,需要专门的无记名证书。 用户代币不提供薄荷信用或内部礼品。 目录 workspaceResolvePeople 继续解决 1 - 200 个明确的UUID profile:lookup;其结果不给予合作者资格.
角色简介
角色摘要配置和持续成果属于概况。 经认证的呼叫者需要
profile:ai_summary:read_own 为自己的结果或 profile:ai_summary:read_all 其他主题
在同一部署中。 父母关系不允许进入。 配置( E)configure和
队列管理( e)manage)是单独的权限.
const response = await api.summaries.latest({ role_id: canonicalRoleId }, { signal });
console.log(response.status, response.data.data.freshness, response.data.data.summary);
用 api.summaries.roles(),然后创建/编辑结构化草案,
校验, 预览一个合格的主题, 公布, 并启用它 setStatus(id, { enabled: true })。 。 。 .
在预览前必须启用全局生成;全局 kill switch 也用 HTTP 409 屏蔽了明确的预览 .
角色在预览其草稿时仍可被禁用. 预览结果仍与已公布结果相区别,从未发布配置.
请求只读取存储的数据 。 接受更新和预览请求返回 HTTP 202; 民意调查运行/工作状态 .
一个失败的刷新会留下一个旧的结果 。 禁用配置隐藏最新
内容,但有明确授权的历史可查。 十进制测量值可能是
字符串以保持财务精度。 标准 Axios 错误、 响应头和取消
选项被保留。 这些行动也可提供: api.operations.aiSummary… 方法。 。 .
配置文件短ID和搜索
const controller = new AbortController();
const matches = await profile.searchProfiles({
search: "GDCN7L", // email, name, phone, national code, or six-character short ID
role: "student",
page: 1,
per_page: 20,
}, { signal: controller.signal });
for (const person of matches.data.data.profiles) {
console.log(person.short_id, person.id, person.user_id);
}
使用您的配置 ProfileApi 实例和实例 AbortController此包装
需求 profile:read 返回全部 Axios 响应; 错误和取消
被保留下来. listProfiles({ "filter[search]": text }),角色列表,以及
filterProfiles 使用相同的现场匹配。 生成的
operations.profileSearchSearchPost({ search: text }) 并匹配短ID和
返回时 short_id 每次攻击,即使 include 不包括核心领域
操作需要 profile:search。最小的人目录接受相同的
在下面寻找 profile:lookup 不返回国家代码.
代码来源于配置行 id, (中文(简体) ), 没有 user_id,没有新的数据库
栏。 匹配忽略了大小写,使波斯/阿拉伯数字正常化. 输入完整
6-字符代码;相撞返回所有相匹配的结果.
使用它的其他细节选择要配置文件,然后使用它 user_id 页:1
配置读取/更新路由. shortIdFromUuid 用于离线显示.
在使用这些搜索之前先部署服务短ID迁移.