@feelflow/ffid-sdk 5.18.0 → 5.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -869,6 +869,93 @@ function createMembersMethods(deps) {
869
869
  return { listMembers, addMember, updateMemberRole, removeMember };
870
870
  }
871
871
 
872
+ // src/client/provisioning-methods.ts
873
+ var USER_PROVISION_ENDPOINT = "/api/v1/ext/users/provision";
874
+ var ORGANIZATION_PROVISION_ENDPOINT = "/api/v1/ext/organizations/provision";
875
+ var MAX_PROVISION_MEMBERS = 100;
876
+ var ASSIGNABLE_MEMBER_ROLES = {
877
+ admin: true,
878
+ member: true,
879
+ viewer: true
880
+ };
881
+ function isAssignableMemberRole(role) {
882
+ return Object.hasOwn(ASSIGNABLE_MEMBER_ROLES, role);
883
+ }
884
+ function createProvisioningMethods(deps) {
885
+ const { fetchWithAuth, createError, authMode } = deps;
886
+ function serviceKeyModeError() {
887
+ if (authMode === "service-key") return null;
888
+ return createError(
889
+ "VALIDATION_ERROR",
890
+ "provisionUser / provisionOrganization \u306F service-key \u8A8D\u8A3C\uFF08X-Service-Api-Key\uFF09\u3067\u306E\u307F\u5229\u7528\u3067\u304D\u307E\u3059\u3002Bearer / cookie \u30E2\u30FC\u30C9\u3067\u306F\u547C\u3073\u51FA\u305B\u307E\u305B\u3093"
891
+ );
892
+ }
893
+ async function provisionUser(params) {
894
+ const modeError = serviceKeyModeError();
895
+ if (modeError) return { error: modeError };
896
+ if (!params.email || !params.email.trim()) {
897
+ return { error: createError("VALIDATION_ERROR", "email \u306F\u5FC5\u9808\u3067\u3059") };
898
+ }
899
+ const body = { email: params.email.trim() };
900
+ if (params.profile !== void 0) body.profile = params.profile;
901
+ if (params.dryRun !== void 0) body.dryRun = params.dryRun;
902
+ return fetchWithAuth(USER_PROVISION_ENDPOINT, {
903
+ method: "POST",
904
+ body: JSON.stringify(body)
905
+ });
906
+ }
907
+ async function provisionOrganization(params) {
908
+ const modeError = serviceKeyModeError();
909
+ if (modeError) return { error: modeError };
910
+ if (!params.name || !params.name.trim()) {
911
+ return { error: createError("VALIDATION_ERROR", "name \u306F\u5FC5\u9808\u3067\u3059") };
912
+ }
913
+ if (!params.ownerEmail || !params.ownerEmail.trim()) {
914
+ return { error: createError("VALIDATION_ERROR", "ownerEmail \u306F\u5FC5\u9808\u3067\u3059") };
915
+ }
916
+ if (params.members) {
917
+ if (params.members.length > MAX_PROVISION_MEMBERS) {
918
+ return {
919
+ error: createError(
920
+ "VALIDATION_ERROR",
921
+ `members \u306F1\u30EA\u30AF\u30A8\u30B9\u30C8\u3042\u305F\u308A\u6700\u5927 ${MAX_PROVISION_MEMBERS} \u4EF6\u307E\u3067\u3067\u3059`
922
+ )
923
+ };
924
+ }
925
+ for (const member of params.members) {
926
+ if (!member.email || !member.email.trim()) {
927
+ return { error: createError("VALIDATION_ERROR", "members[].email \u306F\u5FC5\u9808\u3067\u3059") };
928
+ }
929
+ if (!isAssignableMemberRole(member.role)) {
930
+ return {
931
+ error: createError(
932
+ "VALIDATION_ERROR",
933
+ "members[].role \u306F admin\u3001member\u3001viewer \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"
934
+ )
935
+ };
936
+ }
937
+ }
938
+ }
939
+ const body = {
940
+ name: params.name.trim(),
941
+ ownerEmail: params.ownerEmail.trim()
942
+ };
943
+ if (params.billingEmail !== void 0) body.billingEmail = params.billingEmail.trim();
944
+ if (params.members !== void 0) {
945
+ body.members = params.members.map((member) => ({
946
+ email: member.email.trim(),
947
+ role: member.role
948
+ }));
949
+ }
950
+ if (params.dryRun !== void 0) body.dryRun = params.dryRun;
951
+ return fetchWithAuth(ORGANIZATION_PROVISION_ENDPOINT, {
952
+ method: "POST",
953
+ body: JSON.stringify(body)
954
+ });
955
+ }
956
+ return { provisionUser, provisionOrganization };
957
+ }
958
+
872
959
  // src/client/seat-methods.ts
873
960
  function seatsEndpoint(subscriptionId) {
874
961
  return `/api/v1/subscriptions/ext/${encodeURIComponent(subscriptionId)}/seats/assignments`;
@@ -1113,7 +1200,7 @@ function createNonContractMethods(deps) {
1113
1200
  }
1114
1201
 
1115
1202
  // src/client/version-check.ts
1116
- var SDK_VERSION = "5.18.0";
1203
+ var SDK_VERSION = "5.19.0";
1117
1204
  var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
1118
1205
  var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
1119
1206
  function sdkHeaders() {
@@ -2954,6 +3041,11 @@ function createFFIDClient(config) {
2954
3041
  createError,
2955
3042
  serviceCode: config.serviceCode
2956
3043
  });
3044
+ const { provisionUser, provisionOrganization } = createProvisioningMethods({
3045
+ fetchWithAuth,
3046
+ createError,
3047
+ authMode
3048
+ });
2957
3049
  const { getProfile, updateProfile } = createProfileMethods({
2958
3050
  fetchWithAuth,
2959
3051
  createError
@@ -3049,6 +3141,8 @@ function createFFIDClient(config) {
3049
3141
  addMember,
3050
3142
  updateMemberRole,
3051
3143
  removeMember,
3144
+ provisionUser,
3145
+ provisionOrganization,
3052
3146
  getProfile,
3053
3147
  updateProfile,
3054
3148
  // Non-contract ext API coverage (#3783)
@@ -1,4 +1,4 @@
1
- import { k as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-Cwk6cG3b.cjs';
1
+ import { k as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-BuDM5tmq.cjs';
2
2
  import '../../types-BeVl-z12.cjs';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { k as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-w8Twi5lD.js';
1
+ import { k as FFIDClient, e as FFIDOAuthUserInfo } from '../../ffid-client-D0x8TBS5.js';
2
2
  import '../../types-BeVl-z12.js';
3
3
 
4
4
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feelflow/ffid-sdk",
3
- "version": "5.18.0",
3
+ "version": "5.19.0",
4
4
  "description": "FeelFlow ID Platform SDK for React/Next.js applications",
5
5
  "keywords": [
6
6
  "feelflow",