@feelflow/ffid-sdk 5.24.3 → 5.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-O3HGRALD.js → chunk-JZB2IM7Y.js} +433 -37
- package/dist/{chunk-AMVL7J2G.cjs → chunk-R4KUHR4S.cjs} +446 -36
- package/dist/components/index.cjs +8 -8
- package/dist/components/index.d.cts +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{ffid-client-BjZphrz9.d.cts → ffid-client-BlVuH6ja.d.cts} +178 -41
- package/dist/{ffid-client-B-xjtrCb.d.ts → ffid-client-BqnzUmG7.d.ts} +178 -41
- package/dist/{index-BRMn6xT0.d.cts → index-D3S_Pkkv.d.cts} +26 -92
- package/dist/{index-BRMn6xT0.d.ts → index-D3S_Pkkv.d.ts} +26 -92
- package/dist/index.cjs +98 -42
- package/dist/index.d.cts +393 -3
- package/dist/index.d.ts +393 -3
- package/dist/index.js +2 -2
- package/dist/server/index.cjs +281 -36
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +281 -36
- package/dist/server/test/index.d.cts +1 -1
- package/dist/server/test/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/server/index.cjs
CHANGED
|
@@ -111,6 +111,24 @@ function isSessionEligibleSubscriptionStatus(value) {
|
|
|
111
111
|
function hasOwnKey(value, key) {
|
|
112
112
|
return Object.prototype.hasOwnProperty.call(value, key);
|
|
113
113
|
}
|
|
114
|
+
function normalizeEntitlements(raw) {
|
|
115
|
+
if (!Array.isArray(raw)) return [];
|
|
116
|
+
return raw.flatMap((code) => {
|
|
117
|
+
if (typeof code !== "string") return [];
|
|
118
|
+
const trimmed = code.trim();
|
|
119
|
+
return trimmed.length > 0 ? [trimmed] : [];
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function normalizeSeatAssignmentClaim(raw, organizationId, subscriptionId) {
|
|
123
|
+
if (!raw || typeof raw !== "object") return null;
|
|
124
|
+
const { organization_id, subscription_id, status } = raw;
|
|
125
|
+
if (typeof organization_id !== "string" || typeof subscription_id !== "string" || typeof status !== "string" || !["active", "revoking", "revoked"].includes(status) || organization_id !== organizationId || subscription_id !== subscriptionId) return null;
|
|
126
|
+
return {
|
|
127
|
+
organizationId: organization_id,
|
|
128
|
+
subscriptionId: subscription_id,
|
|
129
|
+
status
|
|
130
|
+
};
|
|
131
|
+
}
|
|
114
132
|
function normalizeUserinfo(raw) {
|
|
115
133
|
const hasOrganizationId = hasOwnKey(raw, "organization_id");
|
|
116
134
|
const hasOrganizationName = hasOwnKey(raw, "organization_name");
|
|
@@ -144,6 +162,11 @@ function normalizeUserinfo(raw) {
|
|
|
144
162
|
organizationId: raw.subscription.organization_id ?? null,
|
|
145
163
|
organizationName: hasOwnKey(raw.subscription, "organization_name") ? raw.subscription.organization_name ?? null : null,
|
|
146
164
|
hasSeatAssignment: raw.subscription.has_seat_assignment ?? false,
|
|
165
|
+
seatAssignment: hasOwnKey(raw.subscription, "seat_assignment") ? normalizeSeatAssignmentClaim(
|
|
166
|
+
raw.subscription.seat_assignment,
|
|
167
|
+
raw.subscription.organization_id ?? null,
|
|
168
|
+
raw.subscription.subscription_id ?? null
|
|
169
|
+
) : void 0,
|
|
147
170
|
// #3464: legacy FFID (< this issue) omits the field on the wire.
|
|
148
171
|
// The "unknown" axis is unused — no consumer differentiates "server
|
|
149
172
|
// didn't tell us" from "definitely not scheduled" because the
|
|
@@ -151,7 +174,10 @@ function normalizeUserinfo(raw) {
|
|
|
151
174
|
// `'active_canceling'`) for legacy backends. Defaulting to `false`
|
|
152
175
|
// here keeps the downstream contract a plain boolean.
|
|
153
176
|
cancelAtPeriodEnd: raw.subscription.cancel_at_period_end ?? false,
|
|
154
|
-
currentPeriodEnd: raw.subscription.current_period_end ?? null
|
|
177
|
+
currentPeriodEnd: raw.subscription.current_period_end ?? null,
|
|
178
|
+
// #4333: legacy FFID (< this issue) omits the field on the wire; the
|
|
179
|
+
// guard defaults to `[]` so consumers always get a plain string[].
|
|
180
|
+
entitlements: normalizeEntitlements(raw.subscription.entitlements)
|
|
155
181
|
} : void 0
|
|
156
182
|
};
|
|
157
183
|
}
|
|
@@ -438,7 +464,12 @@ function createVerifyAccessToken(deps) {
|
|
|
438
464
|
member_role: introspectResponse.subscription.member_role,
|
|
439
465
|
organization_id: introspectResponse.subscription.organization_id,
|
|
440
466
|
organization_name: introspectResponse.subscription.organization_name ?? null,
|
|
441
|
-
has_seat_assignment: introspectResponse.subscription.has_seat_assignment ?? false
|
|
467
|
+
has_seat_assignment: introspectResponse.subscription.has_seat_assignment ?? false,
|
|
468
|
+
...Object.prototype.hasOwnProperty.call(introspectResponse.subscription, "seat_assignment") ? { seat_assignment: introspectResponse.subscription.seat_assignment } : {},
|
|
469
|
+
// #4333: forward pack entitlement codes through the introspect →
|
|
470
|
+
// userinfo normalization boundary. normalizeUserinfo guards the
|
|
471
|
+
// value, so an older FFID that omits it degrades to `[]`.
|
|
472
|
+
entitlements: introspectResponse.subscription.entitlements
|
|
442
473
|
}
|
|
443
474
|
} : base;
|
|
444
475
|
const userinfo = normalizeUserinfo(raw);
|
|
@@ -809,6 +840,213 @@ function createSubscriptionMethods(deps) {
|
|
|
809
840
|
};
|
|
810
841
|
}
|
|
811
842
|
|
|
843
|
+
// src/types/published-catalog.ts
|
|
844
|
+
var FFID_CATALOG_ENVIRONMENTS = ["staging", "production"];
|
|
845
|
+
var FFID_CATALOG_PUBLICATION_STATUSES = [
|
|
846
|
+
"approved",
|
|
847
|
+
"superseded",
|
|
848
|
+
"revoking",
|
|
849
|
+
"revoked"
|
|
850
|
+
];
|
|
851
|
+
|
|
852
|
+
// src/shared/catalog-hash.ts
|
|
853
|
+
var CATALOG_HASH_PATTERN = /^[0-9a-f]{64}$/;
|
|
854
|
+
|
|
855
|
+
// src/client/catalog-methods.ts
|
|
856
|
+
var EXT_CATALOG_ENDPOINT = "/api/v1/subscriptions/ext/catalog";
|
|
857
|
+
var MALFORMED_CATALOG_CODE = "MALFORMED_PUBLISHED_CATALOG";
|
|
858
|
+
var PUBLICATION_STATUSES = new Set(
|
|
859
|
+
FFID_CATALOG_PUBLICATION_STATUSES
|
|
860
|
+
);
|
|
861
|
+
var CATALOG_ENVIRONMENTS = new Set(FFID_CATALOG_ENVIRONMENTS);
|
|
862
|
+
var BILLING_INTERVALS = /* @__PURE__ */ new Set(["monthly", "yearly"]);
|
|
863
|
+
var TAX_BEHAVIORS = /* @__PURE__ */ new Set(["inclusive", "exclusive"]);
|
|
864
|
+
var PUBLICATION_HASH_FIELDS = [
|
|
865
|
+
"praxisCopyHash",
|
|
866
|
+
"ffidCheckoutCopyHash",
|
|
867
|
+
"legalDisclosureHash",
|
|
868
|
+
"taxConfigurationHash",
|
|
869
|
+
"paymentConfigurationHash",
|
|
870
|
+
"scopeHash"
|
|
871
|
+
];
|
|
872
|
+
var PUBLICATION_REQUIRED_TIMESTAMP_FIELDS = ["reviewedAt", "effectiveAt"];
|
|
873
|
+
var PUBLICATION_NULLABLE_TIMESTAMP_FIELDS = [
|
|
874
|
+
"supersededAt",
|
|
875
|
+
"sellThroughUntil",
|
|
876
|
+
"revocationEffectiveAt"
|
|
877
|
+
];
|
|
878
|
+
function malformed(detail) {
|
|
879
|
+
return new FFIDSDKError(
|
|
880
|
+
MALFORMED_CATALOG_CODE,
|
|
881
|
+
`SDK: server returned malformed PublishedCatalog \u2014 ${detail}`
|
|
882
|
+
);
|
|
883
|
+
}
|
|
884
|
+
function isNullableIsoString(value) {
|
|
885
|
+
return value === null || typeof value === "string" && value.trim() !== "";
|
|
886
|
+
}
|
|
887
|
+
function isNonNegativeIntOrNull(value) {
|
|
888
|
+
return value === null || typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
889
|
+
}
|
|
890
|
+
function validatePublishedPlan(plan, index) {
|
|
891
|
+
if (plan === null || typeof plan !== "object") {
|
|
892
|
+
throw malformed(`plans[${index}] must be an object`);
|
|
893
|
+
}
|
|
894
|
+
const record = plan;
|
|
895
|
+
for (const key of Object.keys(record)) {
|
|
896
|
+
if (/stripe/i.test(key)) {
|
|
897
|
+
throw malformed(
|
|
898
|
+
`plans[${index}] contains a Stripe identifier field (${JSON.stringify(key)}) \u2014 published catalogs must never expose Stripe IDs`
|
|
899
|
+
);
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
if (isBlankString(record.code)) {
|
|
903
|
+
throw malformed(`plans[${index}].code must be a non-empty string`);
|
|
904
|
+
}
|
|
905
|
+
if (isBlankString(record.name)) {
|
|
906
|
+
throw malformed(`plans[${index}].name must be a non-empty string`);
|
|
907
|
+
}
|
|
908
|
+
if (record.description !== null && typeof record.description !== "string") {
|
|
909
|
+
throw malformed(`plans[${index}].description must be string or null`);
|
|
910
|
+
}
|
|
911
|
+
if (isBlankString(record.currency)) {
|
|
912
|
+
throw malformed(`plans[${index}].currency must be a non-empty string`);
|
|
913
|
+
}
|
|
914
|
+
if (!isNonNegativeIntOrNull(record.priceMonthly)) {
|
|
915
|
+
throw malformed(`plans[${index}].priceMonthly must be a non-negative integer or null`);
|
|
916
|
+
}
|
|
917
|
+
if (!isNonNegativeIntOrNull(record.priceYearly)) {
|
|
918
|
+
throw malformed(`plans[${index}].priceYearly must be a non-negative integer or null`);
|
|
919
|
+
}
|
|
920
|
+
if (typeof record.taxBehavior !== "string" || !TAX_BEHAVIORS.has(record.taxBehavior)) {
|
|
921
|
+
throw malformed(
|
|
922
|
+
`plans[${index}].taxBehavior must be inclusive | exclusive (got ${JSON.stringify(record.taxBehavior)})`
|
|
923
|
+
);
|
|
924
|
+
}
|
|
925
|
+
const intervals = record.billingIntervals;
|
|
926
|
+
if (!Array.isArray(intervals) || intervals.length === 0 || intervals.some((interval) => typeof interval !== "string" || !BILLING_INTERVALS.has(interval))) {
|
|
927
|
+
throw malformed(
|
|
928
|
+
`plans[${index}].billingIntervals must be a non-empty array of monthly | yearly`
|
|
929
|
+
);
|
|
930
|
+
}
|
|
931
|
+
if (intervals.includes("monthly") && record.priceMonthly === null) {
|
|
932
|
+
throw malformed(`plans[${index}] offers monthly billing but priceMonthly is null`);
|
|
933
|
+
}
|
|
934
|
+
if (intervals.includes("yearly") && record.priceYearly === null) {
|
|
935
|
+
throw malformed(`plans[${index}] offers yearly billing but priceYearly is null`);
|
|
936
|
+
}
|
|
937
|
+
if (typeof record.minSeats !== "number" || !Number.isInteger(record.minSeats) || record.minSeats < 1) {
|
|
938
|
+
throw malformed(`plans[${index}].minSeats must be a positive integer`);
|
|
939
|
+
}
|
|
940
|
+
if (record.maxSeats !== null && (typeof record.maxSeats !== "number" || !Number.isInteger(record.maxSeats) || record.maxSeats < 1)) {
|
|
941
|
+
throw malformed(`plans[${index}].maxSeats must be a positive integer or null`);
|
|
942
|
+
}
|
|
943
|
+
if (record.maxSeats !== null && record.maxSeats < record.minSeats) {
|
|
944
|
+
throw malformed(`plans[${index}].maxSeats must be >= minSeats`);
|
|
945
|
+
}
|
|
946
|
+
if (typeof record.displayOrder !== "number" || !Number.isInteger(record.displayOrder)) {
|
|
947
|
+
throw malformed(`plans[${index}].displayOrder must be an integer`);
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
function validatePublishedCatalog(catalog) {
|
|
951
|
+
if (catalog === null || typeof catalog !== "object") {
|
|
952
|
+
throw malformed(
|
|
953
|
+
`expected object, got ${catalog === null ? "null" : typeof catalog}`
|
|
954
|
+
);
|
|
955
|
+
}
|
|
956
|
+
const c = catalog;
|
|
957
|
+
const service = c.service;
|
|
958
|
+
if (service === null || typeof service !== "object") {
|
|
959
|
+
throw malformed("service must be an object");
|
|
960
|
+
}
|
|
961
|
+
const s = service;
|
|
962
|
+
if (isBlankString(s.code)) {
|
|
963
|
+
throw malformed("service.code must be a non-empty string");
|
|
964
|
+
}
|
|
965
|
+
if (isBlankString(s.name)) {
|
|
966
|
+
throw malformed("service.name must be a non-empty string");
|
|
967
|
+
}
|
|
968
|
+
if (isBlankString(c.catalogVersion)) {
|
|
969
|
+
throw malformed("catalogVersion must be a non-empty string");
|
|
970
|
+
}
|
|
971
|
+
const publication = c.publication;
|
|
972
|
+
if (publication === null || typeof publication !== "object") {
|
|
973
|
+
throw malformed("publication must be an object");
|
|
974
|
+
}
|
|
975
|
+
const p = publication;
|
|
976
|
+
if (isBlankString(p.serviceCode)) {
|
|
977
|
+
throw malformed("publication.serviceCode must be a non-empty string");
|
|
978
|
+
}
|
|
979
|
+
if (typeof p.environment !== "string" || !CATALOG_ENVIRONMENTS.has(p.environment)) {
|
|
980
|
+
throw malformed(
|
|
981
|
+
`publication.environment must be staging | production (got ${JSON.stringify(p.environment)})`
|
|
982
|
+
);
|
|
983
|
+
}
|
|
984
|
+
if (p.catalogVersion !== c.catalogVersion) {
|
|
985
|
+
throw malformed(
|
|
986
|
+
`publication.catalogVersion (${JSON.stringify(p.catalogVersion)}) does not match top-level catalogVersion (${JSON.stringify(c.catalogVersion)})`
|
|
987
|
+
);
|
|
988
|
+
}
|
|
989
|
+
if (typeof p.status !== "string" || !PUBLICATION_STATUSES.has(p.status)) {
|
|
990
|
+
throw malformed(
|
|
991
|
+
`publication.status must be one of approved | superseded | revoking | revoked (got ${JSON.stringify(p.status)})`
|
|
992
|
+
);
|
|
993
|
+
}
|
|
994
|
+
for (const field of PUBLICATION_HASH_FIELDS) {
|
|
995
|
+
const value = p[field];
|
|
996
|
+
if (typeof value !== "string" || !CATALOG_HASH_PATTERN.test(value)) {
|
|
997
|
+
throw malformed(`publication.${field} must be lowercase SHA-256 hex (64 chars)`);
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
if (typeof p.salesEpoch !== "number" || !Number.isInteger(p.salesEpoch) || p.salesEpoch < 1) {
|
|
1001
|
+
throw malformed(
|
|
1002
|
+
`publication.salesEpoch must be a positive integer (got ${JSON.stringify(p.salesEpoch)})`
|
|
1003
|
+
);
|
|
1004
|
+
}
|
|
1005
|
+
if (isBlankString(p.approvalId)) {
|
|
1006
|
+
throw malformed("publication.approvalId must be a non-empty string");
|
|
1007
|
+
}
|
|
1008
|
+
for (const field of PUBLICATION_REQUIRED_TIMESTAMP_FIELDS) {
|
|
1009
|
+
if (isBlankString(p[field])) {
|
|
1010
|
+
throw malformed(`publication.${field} must be a non-empty ISO 8601 string`);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
for (const field of PUBLICATION_NULLABLE_TIMESTAMP_FIELDS) {
|
|
1014
|
+
if (!isNullableIsoString(p[field])) {
|
|
1015
|
+
throw malformed(`publication.${field} must be a non-empty ISO 8601 string or null`);
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
if (!Array.isArray(c.plans)) {
|
|
1019
|
+
throw malformed(`plans must be an array (got ${typeof c.plans})`);
|
|
1020
|
+
}
|
|
1021
|
+
for (const [index, plan] of c.plans.entries()) {
|
|
1022
|
+
validatePublishedPlan(plan, index);
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
function createCatalogMethods(deps) {
|
|
1026
|
+
const { fetchWithAuth, createError } = deps;
|
|
1027
|
+
async function getPublishedCatalog(serviceCode) {
|
|
1028
|
+
if (isBlankString(serviceCode)) {
|
|
1029
|
+
return {
|
|
1030
|
+
error: createError("VALIDATION_ERROR", "serviceCode \u306F\u5FC5\u9808\u3067\u3059")
|
|
1031
|
+
};
|
|
1032
|
+
}
|
|
1033
|
+
const requestedCode = serviceCode.trim();
|
|
1034
|
+
const response = await fetchWithAuth(
|
|
1035
|
+
`${EXT_CATALOG_ENDPOINT}/${encodeURIComponent(requestedCode)}`
|
|
1036
|
+
);
|
|
1037
|
+
if (response.data !== void 0) {
|
|
1038
|
+
validatePublishedCatalog(response.data);
|
|
1039
|
+
if (response.data.service.code !== requestedCode || response.data.publication.serviceCode !== requestedCode) {
|
|
1040
|
+
throw malformed(
|
|
1041
|
+
`response is for service ${JSON.stringify(response.data.service.code)} (publication: ${JSON.stringify(response.data.publication.serviceCode)}) but ${JSON.stringify(requestedCode)} was requested`
|
|
1042
|
+
);
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
return response;
|
|
1046
|
+
}
|
|
1047
|
+
return { getPublishedCatalog };
|
|
1048
|
+
}
|
|
1049
|
+
|
|
812
1050
|
// src/client/members-methods.ts
|
|
813
1051
|
var EXT_MEMBERS_ENDPOINT = "/api/v1/organizations/ext/members";
|
|
814
1052
|
function createMembersMethods(deps) {
|
|
@@ -1251,7 +1489,7 @@ function validateTokenResponse(tokenResponse) {
|
|
|
1251
1489
|
}
|
|
1252
1490
|
|
|
1253
1491
|
// src/client/version-check.ts
|
|
1254
|
-
var SDK_VERSION = "5.
|
|
1492
|
+
var SDK_VERSION = "5.27.0";
|
|
1255
1493
|
var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
|
|
1256
1494
|
var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
|
|
1257
1495
|
function sdkHeaders() {
|
|
@@ -2695,39 +2933,7 @@ var BLOCKING_EFFECTIVE_STATUSES = [
|
|
|
2695
2933
|
"trial_expired"
|
|
2696
2934
|
];
|
|
2697
2935
|
|
|
2698
|
-
// src/client/
|
|
2699
|
-
var FFID_ERROR_CODES = {
|
|
2700
|
-
NETWORK_ERROR: "NETWORK_ERROR",
|
|
2701
|
-
PARSE_ERROR: "PARSE_ERROR",
|
|
2702
|
-
UNKNOWN_ERROR: "UNKNOWN_ERROR",
|
|
2703
|
-
TOKEN_EXCHANGE_ERROR: "TOKEN_EXCHANGE_ERROR",
|
|
2704
|
-
TOKEN_REFRESH_ERROR: "TOKEN_REFRESH_ERROR",
|
|
2705
|
-
NO_TOKENS: "NO_TOKENS",
|
|
2706
|
-
TOKEN_VERIFICATION_ERROR: "TOKEN_VERIFICATION_ERROR",
|
|
2707
|
-
TOKEN_EXPIRED: "TOKEN_EXPIRED",
|
|
2708
|
-
STATE_MISMATCH_ERROR: "STATE_MISMATCH_ERROR"
|
|
2709
|
-
};
|
|
2710
|
-
|
|
2711
|
-
// src/client/ffid-client.ts
|
|
2712
|
-
var UNAUTHORIZED_STATUS2 = 401;
|
|
2713
|
-
var SDK_LOG_PREFIX = "[FFID SDK]";
|
|
2714
|
-
var noopLogger = {
|
|
2715
|
-
debug: () => {
|
|
2716
|
-
},
|
|
2717
|
-
info: () => {
|
|
2718
|
-
},
|
|
2719
|
-
warn: () => {
|
|
2720
|
-
},
|
|
2721
|
-
error: () => {
|
|
2722
|
-
}
|
|
2723
|
-
};
|
|
2724
|
-
var consoleLogger = {
|
|
2725
|
-
debug: (...args) => console.debug(SDK_LOG_PREFIX, ...args),
|
|
2726
|
-
info: (...args) => console.info(SDK_LOG_PREFIX, ...args),
|
|
2727
|
-
warn: (...args) => console.warn(SDK_LOG_PREFIX, ...args),
|
|
2728
|
-
error: (...args) => console.error(SDK_LOG_PREFIX, ...args)
|
|
2729
|
-
};
|
|
2730
|
-
var EXT_CHECK_ENDPOINT = "/api/v1/subscriptions/ext/check";
|
|
2936
|
+
// src/client/service-access-decision.ts
|
|
2731
2937
|
var DEFAULT_ALLOW_GRACE = true;
|
|
2732
2938
|
var DEFAULT_SERVICE_ACCESS_FAIL_POLICY = "failClosed";
|
|
2733
2939
|
var SERVICE_ACCESS_DENIED_CODE = "SERVICE_ACCESS_DENIED";
|
|
@@ -2794,6 +3000,40 @@ function failClosedServiceAccessDecision(params, error) {
|
|
|
2794
3000
|
error
|
|
2795
3001
|
};
|
|
2796
3002
|
}
|
|
3003
|
+
|
|
3004
|
+
// src/client/error-codes.ts
|
|
3005
|
+
var FFID_ERROR_CODES = {
|
|
3006
|
+
NETWORK_ERROR: "NETWORK_ERROR",
|
|
3007
|
+
PARSE_ERROR: "PARSE_ERROR",
|
|
3008
|
+
UNKNOWN_ERROR: "UNKNOWN_ERROR",
|
|
3009
|
+
TOKEN_EXCHANGE_ERROR: "TOKEN_EXCHANGE_ERROR",
|
|
3010
|
+
TOKEN_REFRESH_ERROR: "TOKEN_REFRESH_ERROR",
|
|
3011
|
+
NO_TOKENS: "NO_TOKENS",
|
|
3012
|
+
TOKEN_VERIFICATION_ERROR: "TOKEN_VERIFICATION_ERROR",
|
|
3013
|
+
TOKEN_EXPIRED: "TOKEN_EXPIRED",
|
|
3014
|
+
STATE_MISMATCH_ERROR: "STATE_MISMATCH_ERROR"
|
|
3015
|
+
};
|
|
3016
|
+
|
|
3017
|
+
// src/client/ffid-client.ts
|
|
3018
|
+
var UNAUTHORIZED_STATUS2 = 401;
|
|
3019
|
+
var SDK_LOG_PREFIX = "[FFID SDK]";
|
|
3020
|
+
var noopLogger = {
|
|
3021
|
+
debug: () => {
|
|
3022
|
+
},
|
|
3023
|
+
info: () => {
|
|
3024
|
+
},
|
|
3025
|
+
warn: () => {
|
|
3026
|
+
},
|
|
3027
|
+
error: () => {
|
|
3028
|
+
}
|
|
3029
|
+
};
|
|
3030
|
+
var consoleLogger = {
|
|
3031
|
+
debug: (...args) => console.debug(SDK_LOG_PREFIX, ...args),
|
|
3032
|
+
info: (...args) => console.info(SDK_LOG_PREFIX, ...args),
|
|
3033
|
+
warn: (...args) => console.warn(SDK_LOG_PREFIX, ...args),
|
|
3034
|
+
error: (...args) => console.error(SDK_LOG_PREFIX, ...args)
|
|
3035
|
+
};
|
|
3036
|
+
var EXT_CHECK_ENDPOINT = "/api/v1/subscriptions/ext/check";
|
|
2797
3037
|
function resolveRedirectUri(raw, logger) {
|
|
2798
3038
|
if (raw === null) return null;
|
|
2799
3039
|
try {
|
|
@@ -3111,6 +3351,10 @@ function createFFIDClient(config) {
|
|
|
3111
3351
|
fetchWithAuth,
|
|
3112
3352
|
createError
|
|
3113
3353
|
});
|
|
3354
|
+
const { getPublishedCatalog } = createCatalogMethods({
|
|
3355
|
+
fetchWithAuth,
|
|
3356
|
+
createError
|
|
3357
|
+
});
|
|
3114
3358
|
const { listMembers, addMember, updateMemberRole, removeMember } = createMembersMethods({
|
|
3115
3359
|
fetchWithAuth,
|
|
3116
3360
|
createError,
|
|
@@ -3237,6 +3481,7 @@ function createFFIDClient(config) {
|
|
|
3237
3481
|
assignSeats,
|
|
3238
3482
|
unassignSeat,
|
|
3239
3483
|
listPlans,
|
|
3484
|
+
getPublishedCatalog,
|
|
3240
3485
|
getSubscription,
|
|
3241
3486
|
subscribe,
|
|
3242
3487
|
changePlan,
|
package/dist/server/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo } from '../ffid-client-
|
|
2
|
-
export { f as FFIDAddMemberParams, g as FFIDAddMemberRequest, h as FFIDAddMemberResponse, i as FFIDAssignableMemberRole, j as FFIDCacheConfig, k as FFIDClient, l as FFIDConfig, m as FFIDListMembersResponse, n as FFIDMemberRole, o as FFIDOrganization, p as FFIDOrganizationMember, q as FFIDOtpSendResponse, r as FFIDOtpVerifyResponse, s as FFIDPasswordResetConfirmResponse, t as FFIDPasswordResetResponse, u as FFIDPasswordResetVerifyResponse, v as FFIDProfileCallOptions, w as FFIDProvisionMemberPlan, x as FFIDProvisionMemberPlanStatus, y as FFIDProvisionMemberResult, z as FFIDProvisionMemberStatus, A as FFIDProvisionOrganizationDryRun, B as FFIDProvisionOrganizationMemberInput, C as FFIDProvisionOrganizationOutcome, D as FFIDProvisionOrganizationParams, E as FFIDProvisionOrganizationResponse, G as FFIDProvisionUserDryRun, H as FFIDProvisionUserOutcome, I as FFIDProvisionUserParams, J as FFIDProvisionUserProfileInput, K as FFIDProvisionUserResponse, L as FFIDProvisionedOrganization, M as FFIDProvisionedUser, N as FFIDRemoveMemberResponse, O as FFIDResetSessionResponse, P as FFIDSubscription, Q as FFIDUpdateMemberRoleResponse, R as FFIDUpdateUserProfileRequest, S as FFIDUser, T as FFIDUserProfile, U as TokenData, V as TokenStore, W as createFFIDClient, X as createTokenStore } from '../ffid-client-
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo } from '../ffid-client-BlVuH6ja.cjs';
|
|
2
|
+
export { f as FFIDAddMemberParams, g as FFIDAddMemberRequest, h as FFIDAddMemberResponse, i as FFIDAssignableMemberRole, j as FFIDCacheConfig, k as FFIDClient, l as FFIDConfig, m as FFIDListMembersResponse, n as FFIDMemberRole, o as FFIDOrganization, p as FFIDOrganizationMember, q as FFIDOtpSendResponse, r as FFIDOtpVerifyResponse, s as FFIDPasswordResetConfirmResponse, t as FFIDPasswordResetResponse, u as FFIDPasswordResetVerifyResponse, v as FFIDProfileCallOptions, w as FFIDProvisionMemberPlan, x as FFIDProvisionMemberPlanStatus, y as FFIDProvisionMemberResult, z as FFIDProvisionMemberStatus, A as FFIDProvisionOrganizationDryRun, B as FFIDProvisionOrganizationMemberInput, C as FFIDProvisionOrganizationOutcome, D as FFIDProvisionOrganizationParams, E as FFIDProvisionOrganizationResponse, G as FFIDProvisionUserDryRun, H as FFIDProvisionUserOutcome, I as FFIDProvisionUserParams, J as FFIDProvisionUserProfileInput, K as FFIDProvisionUserResponse, L as FFIDProvisionedOrganization, M as FFIDProvisionedUser, N as FFIDRemoveMemberResponse, O as FFIDResetSessionResponse, P as FFIDSubscription, Q as FFIDUpdateMemberRoleResponse, R as FFIDUpdateUserProfileRequest, S as FFIDUser, T as FFIDUserProfile, U as TokenData, V as TokenStore, W as createFFIDClient, X as createTokenStore } from '../ffid-client-BlVuH6ja.cjs';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-D61jqRIO.cjs';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import '../types-Cjb9J0rL.cjs';
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo } from '../ffid-client-
|
|
2
|
-
export { f as FFIDAddMemberParams, g as FFIDAddMemberRequest, h as FFIDAddMemberResponse, i as FFIDAssignableMemberRole, j as FFIDCacheConfig, k as FFIDClient, l as FFIDConfig, m as FFIDListMembersResponse, n as FFIDMemberRole, o as FFIDOrganization, p as FFIDOrganizationMember, q as FFIDOtpSendResponse, r as FFIDOtpVerifyResponse, s as FFIDPasswordResetConfirmResponse, t as FFIDPasswordResetResponse, u as FFIDPasswordResetVerifyResponse, v as FFIDProfileCallOptions, w as FFIDProvisionMemberPlan, x as FFIDProvisionMemberPlanStatus, y as FFIDProvisionMemberResult, z as FFIDProvisionMemberStatus, A as FFIDProvisionOrganizationDryRun, B as FFIDProvisionOrganizationMemberInput, C as FFIDProvisionOrganizationOutcome, D as FFIDProvisionOrganizationParams, E as FFIDProvisionOrganizationResponse, G as FFIDProvisionUserDryRun, H as FFIDProvisionUserOutcome, I as FFIDProvisionUserParams, J as FFIDProvisionUserProfileInput, K as FFIDProvisionUserResponse, L as FFIDProvisionedOrganization, M as FFIDProvisionedUser, N as FFIDRemoveMemberResponse, O as FFIDResetSessionResponse, P as FFIDSubscription, Q as FFIDUpdateMemberRoleResponse, R as FFIDUpdateUserProfileRequest, S as FFIDUser, T as FFIDUserProfile, U as TokenData, V as TokenStore, W as createFFIDClient, X as createTokenStore } from '../ffid-client-
|
|
1
|
+
import { F as FFIDLogger, a as FFIDError, b as FFIDCacheAdapter, c as FFIDVerifyAccessTokenOptions, d as FFIDApiResponse, e as FFIDOAuthUserInfo } from '../ffid-client-BqnzUmG7.js';
|
|
2
|
+
export { f as FFIDAddMemberParams, g as FFIDAddMemberRequest, h as FFIDAddMemberResponse, i as FFIDAssignableMemberRole, j as FFIDCacheConfig, k as FFIDClient, l as FFIDConfig, m as FFIDListMembersResponse, n as FFIDMemberRole, o as FFIDOrganization, p as FFIDOrganizationMember, q as FFIDOtpSendResponse, r as FFIDOtpVerifyResponse, s as FFIDPasswordResetConfirmResponse, t as FFIDPasswordResetResponse, u as FFIDPasswordResetVerifyResponse, v as FFIDProfileCallOptions, w as FFIDProvisionMemberPlan, x as FFIDProvisionMemberPlanStatus, y as FFIDProvisionMemberResult, z as FFIDProvisionMemberStatus, A as FFIDProvisionOrganizationDryRun, B as FFIDProvisionOrganizationMemberInput, C as FFIDProvisionOrganizationOutcome, D as FFIDProvisionOrganizationParams, E as FFIDProvisionOrganizationResponse, G as FFIDProvisionUserDryRun, H as FFIDProvisionUserOutcome, I as FFIDProvisionUserParams, J as FFIDProvisionUserProfileInput, K as FFIDProvisionUserResponse, L as FFIDProvisionedOrganization, M as FFIDProvisionedUser, N as FFIDRemoveMemberResponse, O as FFIDResetSessionResponse, P as FFIDSubscription, Q as FFIDUpdateMemberRoleResponse, R as FFIDUpdateUserProfileRequest, S as FFIDUser, T as FFIDUserProfile, U as TokenData, V as TokenStore, W as createFFIDClient, X as createTokenStore } from '../ffid-client-BqnzUmG7.js';
|
|
3
3
|
export { D as DEFAULT_API_BASE_URL, a as DEFAULT_OAUTH_SCOPES } from '../constants-D61jqRIO.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import '../types-Cjb9J0rL.js';
|