@hexclave/shared 1.0.25 → 1.0.26

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 (64) hide show
  1. package/dist/config/schema.d.ts +140 -140
  2. package/dist/config-authoring.d.ts +3 -0
  3. package/dist/config-authoring.d.ts.map +1 -1
  4. package/dist/config-authoring.js +3 -0
  5. package/dist/config-authoring.js.map +1 -1
  6. package/dist/esm/config/schema.d.ts +140 -140
  7. package/dist/esm/config-authoring.d.ts +3 -0
  8. package/dist/esm/config-authoring.d.ts.map +1 -1
  9. package/dist/esm/config-authoring.js +3 -0
  10. package/dist/esm/config-authoring.js.map +1 -1
  11. package/dist/esm/interface/admin-interface.d.ts +3 -1
  12. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  13. package/dist/esm/interface/admin-interface.js +3 -0
  14. package/dist/esm/interface/admin-interface.js.map +1 -1
  15. package/dist/esm/interface/admin-metrics.d.ts +10 -10
  16. package/dist/esm/interface/conversations.d.ts +6 -6
  17. package/dist/esm/interface/crud/current-user.d.ts +5 -5
  18. package/dist/esm/interface/crud/email-outbox.d.ts +206 -206
  19. package/dist/esm/interface/crud/products.d.ts +15 -15
  20. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  21. package/dist/esm/interface/crud/project-api-keys.d.ts +2 -2
  22. package/dist/esm/interface/crud/projects.d.ts +43 -43
  23. package/dist/esm/interface/crud/team-member-profiles.d.ts +8 -8
  24. package/dist/esm/interface/crud/transactions.d.ts +20 -20
  25. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  26. package/dist/esm/interface/crud/users.d.ts +4 -4
  27. package/dist/esm/interface/plan-usage.d.ts +57 -0
  28. package/dist/esm/interface/plan-usage.d.ts.map +1 -0
  29. package/dist/esm/interface/plan-usage.js +35 -0
  30. package/dist/esm/interface/plan-usage.js.map +1 -0
  31. package/dist/esm/known-errors.d.ts +1 -1
  32. package/dist/esm/schema-fields.d.ts +1 -1
  33. package/dist/esm/sessions.d.ts +7 -7
  34. package/dist/{index-fQbeILq7.d.ts → index-nCRuFJTF.d.ts} +1 -1
  35. package/dist/{index-fQbeILq7.d.ts.map → index-nCRuFJTF.d.ts.map} +1 -1
  36. package/dist/interface/admin-interface.d.ts +3 -1
  37. package/dist/interface/admin-interface.d.ts.map +1 -1
  38. package/dist/interface/admin-interface.js +3 -0
  39. package/dist/interface/admin-interface.js.map +1 -1
  40. package/dist/interface/admin-metrics.d.ts +10 -10
  41. package/dist/interface/client-interface.d.ts +1 -1
  42. package/dist/interface/conversations.d.ts +6 -6
  43. package/dist/interface/crud/current-user.d.ts +5 -5
  44. package/dist/interface/crud/email-outbox.d.ts +206 -206
  45. package/dist/interface/crud/products.d.ts +15 -15
  46. package/dist/interface/crud/products.d.ts.map +1 -1
  47. package/dist/interface/crud/project-api-keys.d.ts +2 -2
  48. package/dist/interface/crud/projects.d.ts +43 -43
  49. package/dist/interface/crud/team-member-profiles.d.ts +8 -8
  50. package/dist/interface/crud/transactions.d.ts +20 -20
  51. package/dist/interface/crud/transactions.d.ts.map +1 -1
  52. package/dist/interface/crud/users.d.ts +4 -4
  53. package/dist/interface/plan-usage.d.ts +57 -0
  54. package/dist/interface/plan-usage.d.ts.map +1 -0
  55. package/dist/interface/plan-usage.js +39 -0
  56. package/dist/interface/plan-usage.js.map +1 -0
  57. package/dist/known-errors.d.ts +1 -1
  58. package/dist/schema-fields.d.ts +1 -1
  59. package/dist/sessions.d.ts +7 -7
  60. package/dist/utils/passkey.d.ts +1 -1
  61. package/package.json +1 -1
  62. package/src/config-authoring.ts +3 -1
  63. package/src/interface/admin-interface.ts +14 -0
  64. package/src/interface/plan-usage.ts +34 -0
@@ -0,0 +1,39 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_chunk = require('../chunk-BE-pF4vm.js');
3
+ let ___schema_fields_js = require("../schema-fields.js");
4
+ let ___plans_js = require("../plans.js");
5
+
6
+ //#region src/interface/plan-usage.ts
7
+ const PLAN_IDS = Object.keys(___plans_js.PLAN_LIMITS);
8
+ const UPGRADE_PLAN_IDS = PLAN_IDS.filter((id) => id !== "free");
9
+ const planUsageKindSchema = (0, ___schema_fields_js.yupString)().oneOf([
10
+ "current",
11
+ "metered",
12
+ "capability"
13
+ ]).defined();
14
+ const planUsageRowSchema = (0, ___schema_fields_js.yupObject)({
15
+ item_id: (0, ___schema_fields_js.yupString)().oneOf(Object.values(___plans_js.ITEM_IDS)).defined(),
16
+ display_name: (0, ___schema_fields_js.yupString)().defined(),
17
+ kind: planUsageKindSchema,
18
+ used: (0, ___schema_fields_js.yupNumber)().integer().nullable().defined(),
19
+ limit: (0, ___schema_fields_js.yupNumber)().integer().nullable().defined(),
20
+ remaining: (0, ___schema_fields_js.yupNumber)().integer().nullable().defined(),
21
+ overage: (0, ___schema_fields_js.yupNumber)().integer().nullable().defined(),
22
+ is_unlimited: (0, ___schema_fields_js.yupBoolean)().defined()
23
+ }).defined();
24
+ const planUsageResponseSchema = (0, ___schema_fields_js.yupObject)({
25
+ owner_team_id: (0, ___schema_fields_js.yupString)().uuid().defined(),
26
+ owner_team_display_name: (0, ___schema_fields_js.yupString)().defined(),
27
+ plan_id: (0, ___schema_fields_js.yupString)().oneOf(PLAN_IDS).defined(),
28
+ plan_display_name: (0, ___schema_fields_js.yupString)().defined(),
29
+ period_start_millis: (0, ___schema_fields_js.yupNumber)().integer().defined(),
30
+ period_end_millis: (0, ___schema_fields_js.yupNumber)().integer().defined(),
31
+ next_plan_id: (0, ___schema_fields_js.yupString)().oneOf(UPGRADE_PLAN_IDS).nullable().defined(),
32
+ rows: (0, ___schema_fields_js.yupArray)(planUsageRowSchema).defined()
33
+ }).defined();
34
+
35
+ //#endregion
36
+ exports.planUsageKindSchema = planUsageKindSchema;
37
+ exports.planUsageResponseSchema = planUsageResponseSchema;
38
+ exports.planUsageRowSchema = planUsageRowSchema;
39
+ //# sourceMappingURL=plan-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-usage.js","names":["PLAN_LIMITS","ITEM_IDS"],"sources":["../../src/interface/plan-usage.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport { ITEM_IDS, PLAN_LIMITS } from \"../plans\";\nimport { yupArray, yupBoolean, yupNumber, yupObject, yupString } from \"../schema-fields\";\n\nconst PLAN_IDS = Object.keys(PLAN_LIMITS) as (keyof typeof PLAN_LIMITS)[];\nconst UPGRADE_PLAN_IDS = PLAN_IDS.filter((id): id is Exclude<keyof typeof PLAN_LIMITS, \"free\"> => id !== \"free\");\n\nexport const planUsageKindSchema = yupString().oneOf([\"current\", \"metered\", \"capability\"]).defined();\n\nexport const planUsageRowSchema = yupObject({\n item_id: yupString().oneOf(Object.values(ITEM_IDS)).defined(),\n display_name: yupString().defined(),\n kind: planUsageKindSchema,\n used: yupNumber().integer().nullable().defined(),\n limit: yupNumber().integer().nullable().defined(),\n remaining: yupNumber().integer().nullable().defined(),\n overage: yupNumber().integer().nullable().defined(),\n is_unlimited: yupBoolean().defined(),\n}).defined();\n\nexport const planUsageResponseSchema = yupObject({\n owner_team_id: yupString().uuid().defined(),\n owner_team_display_name: yupString().defined(),\n plan_id: yupString().oneOf(PLAN_IDS).defined(),\n plan_display_name: yupString().defined(),\n period_start_millis: yupNumber().integer().defined(),\n period_end_millis: yupNumber().integer().defined(),\n next_plan_id: yupString().oneOf(UPGRADE_PLAN_IDS).nullable().defined(),\n rows: yupArray(planUsageRowSchema).defined(),\n}).defined();\n\nexport type PlanUsageKind = yup.InferType<typeof planUsageKindSchema>;\nexport type PlanUsageRow = yup.InferType<typeof planUsageRowSchema>;\nexport type PlanUsageResponse = yup.InferType<typeof planUsageResponseSchema>;\n"],"mappings":";;;;;;AAIA,MAAM,WAAW,OAAO,KAAKA,wBAAY;AACzC,MAAM,mBAAmB,SAAS,QAAQ,OAAwD,OAAO,OAAO;AAEhH,MAAa,0DAAiC,CAAC,MAAM;CAAC;CAAW;CAAW;CAAa,CAAC,CAAC,SAAS;AAEpG,MAAa,wDAA+B;CAC1C,6CAAoB,CAAC,MAAM,OAAO,OAAOC,qBAAS,CAAC,CAAC,SAAS;CAC7D,kDAAyB,CAAC,SAAS;CACnC,MAAM;CACN,0CAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS;CAChD,2CAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS;CACjD,+CAAsB,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS;CACrD,6CAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS;CACnD,mDAA0B,CAAC,SAAS;CACrC,CAAC,CAAC,SAAS;AAEZ,MAAa,6DAAoC;CAC/C,mDAA0B,CAAC,MAAM,CAAC,SAAS;CAC3C,6DAAoC,CAAC,SAAS;CAC9C,6CAAoB,CAAC,MAAM,SAAS,CAAC,SAAS;CAC9C,uDAA8B,CAAC,SAAS;CACxC,yDAAgC,CAAC,SAAS,CAAC,SAAS;CACpD,uDAA8B,CAAC,SAAS,CAAC,SAAS;CAClD,kDAAyB,CAAC,MAAM,iBAAiB,CAAC,UAAU,CAAC,SAAS;CACtE,wCAAe,mBAAmB,CAAC,SAAS;CAC7C,CAAC,CAAC,SAAS"}
@@ -518,7 +518,7 @@ declare const KnownErrors: {
518
518
  CustomerDoesNotExist: KnownErrorConstructor<KnownError & KnownErrorBrand<"CUSTOMER_DOES_NOT_EXIST">, [customerId: string]> & {
519
519
  errorCode: "CUSTOMER_DOES_NOT_EXIST";
520
520
  };
521
- ProductDoesNotExist: KnownErrorConstructor<KnownError & KnownErrorBrand<"PRODUCT_DOES_NOT_EXIST">, [productId: string, context: "server_only" | "item_exists" | null]> & {
521
+ ProductDoesNotExist: KnownErrorConstructor<KnownError & KnownErrorBrand<"PRODUCT_DOES_NOT_EXIST">, [productId: string, context: "item_exists" | "server_only" | null]> & {
522
522
  errorCode: "PRODUCT_DOES_NOT_EXIST";
523
523
  };
524
524
  ProductCustomerTypeDoesNotMatch: KnownErrorConstructor<KnownError & KnownErrorBrand<"PRODUCT_CUSTOMER_TYPE_DOES_NOT_MATCH">, [productId: string | undefined, customerId: string, productCustomerType: "team" | "user" | "custom" | undefined, actualCustomerType: "team" | "user" | "custom"]> & {
@@ -314,8 +314,8 @@ declare const inlineProductSchema: yup$1.ObjectSchema<{
314
314
  free_trial?: DayInterval | undefined;
315
315
  }>;
316
316
  included_items: Record<string, {
317
- repeat?: "never" | DayInterval | undefined;
318
317
  quantity?: number | undefined;
318
+ repeat?: "never" | DayInterval | undefined;
319
319
  expires?: "never" | "when-purchase-expires" | "when-repeated" | undefined;
320
320
  }>;
321
321
  client_metadata: {} | null | undefined;
@@ -9,24 +9,24 @@ declare class AccessToken {
9
9
  private constructor();
10
10
  get payload(): {
11
11
  exp?: number | undefined;
12
+ project_id: string;
13
+ refresh_token_id: string;
14
+ email: string | null;
15
+ restricted_reason: {
16
+ type: "anonymous" | "email_not_verified" | "restricted_by_administrator";
17
+ } | null;
18
+ branch_id: string;
12
19
  sub: string;
13
20
  iat: number;
14
21
  iss: string;
15
22
  aud: string;
16
- project_id: string;
17
- branch_id: string;
18
- refresh_token_id: string;
19
23
  role: "authenticated";
20
24
  name: string | null;
21
- email: string | null;
22
25
  email_verified: boolean;
23
26
  selected_team_id: string | null;
24
27
  signed_up_at: number;
25
28
  is_anonymous: boolean;
26
29
  is_restricted: boolean;
27
- restricted_reason: {
28
- type: "anonymous" | "email_not_verified" | "restricted_by_administrator";
29
- } | null;
30
30
  requires_totp_mfa: boolean;
31
31
  };
32
32
  get expiresAt(): Date;
@@ -1,2 +1,2 @@
1
- import { a as RegistrationResponseJSON, i as PublicKeyCredentialRequestOptionsJSON, n as AuthenticatorAttestationResponseJSON, r as PublicKeyCredentialCreationOptionsJSON, t as AuthenticationResponseJSON } from "../index-fQbeILq7.js";
1
+ import { a as RegistrationResponseJSON, i as PublicKeyCredentialRequestOptionsJSON, n as AuthenticatorAttestationResponseJSON, r as PublicKeyCredentialCreationOptionsJSON, t as AuthenticationResponseJSON } from "../index-nCRuFJTF.js";
2
2
  export { type AuthenticationResponseJSON, type AuthenticatorAttestationResponseJSON, type PublicKeyCredentialCreationOptionsJSON, type PublicKeyCredentialRequestOptionsJSON, type RegistrationResponseJSON };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hexclave/shared",
3
- "version": "1.0.25",
3
+ "version": "1.0.26",
4
4
  "repository": "https://github.com/hexclave/hexclave",
5
5
  "files": [
6
6
  "README.md",
@@ -31,7 +31,9 @@ export function defineStackConfig(config: StrictStackConfig<StackConfig>): Stack
31
31
  return config;
32
32
  }
33
33
 
34
- // Hexclave alias — separate function so it does not inherit the deprecation tag.
34
+ /**
35
+ * Defines a Hexclave project configuration as code. See the documentation at https://skill.hexclave.com for more information.
36
+ */
35
37
  export function defineHexclaveConfig(config: StrictStackConfig<HexclaveConfig>): HexclaveConfig {
36
38
  return config;
37
39
  }
@@ -6,6 +6,7 @@ import type { MoneyAmount } from "../utils/currency-constants";
6
6
  import type { Json } from "../utils/json";
7
7
  import { Result } from "../utils/results";
8
8
  import { urlString } from "../utils/urls";
9
+ import type { PlanUsageResponse } from "./plan-usage";
9
10
  import type { AnalyticsClickmapDevice, AnalyticsClickmapKind, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse, MetricsResponse, MetricsUserCounts, UserActivityResponse } from "./admin-metrics";
10
11
  import type { AnalyticsQueryOptions, AnalyticsQueryResponse } from "./crud/analytics";
11
12
  import { EmailOutboxCrud } from "./crud/email-outbox";
@@ -27,6 +28,8 @@ import { TeamPermissionDefinitionsCrud } from "./crud/team-permissions";
27
28
  import type { Transaction, TransactionType } from "./crud/transactions";
28
29
  import { ServerAuthApplicationOptions, HexclaveServerInterface } from "./server-interface";
29
30
 
31
+ export type { PlanUsageResponse } from "./plan-usage";
32
+
30
33
  type BranchConfigSourceApi = yup.InferType<typeof branchConfigSourceSchema>;
31
34
 
32
35
  export type ChatContent = Array<
@@ -424,6 +427,17 @@ export class HexclaveAdminInterface extends HexclaveServerInterface {
424
427
  };
425
428
  }
426
429
 
430
+ async getPlanUsage(): Promise<PlanUsageResponse> {
431
+ const response = await this.sendAdminRequest(
432
+ "/internal/plan-usage",
433
+ {
434
+ method: "GET",
435
+ },
436
+ null,
437
+ );
438
+ return await response.json();
439
+ }
440
+
427
441
  async getUserActivity(userId: string): Promise<UserActivityResponse> {
428
442
  const response = await this.sendAdminRequest(
429
443
  urlString`/internal/user-activity?user_id=${userId}`,
@@ -0,0 +1,34 @@
1
+ import * as yup from "yup";
2
+ import { ITEM_IDS, PLAN_LIMITS } from "../plans";
3
+ import { yupArray, yupBoolean, yupNumber, yupObject, yupString } from "../schema-fields";
4
+
5
+ const PLAN_IDS = Object.keys(PLAN_LIMITS) as (keyof typeof PLAN_LIMITS)[];
6
+ const UPGRADE_PLAN_IDS = PLAN_IDS.filter((id): id is Exclude<keyof typeof PLAN_LIMITS, "free"> => id !== "free");
7
+
8
+ export const planUsageKindSchema = yupString().oneOf(["current", "metered", "capability"]).defined();
9
+
10
+ export const planUsageRowSchema = yupObject({
11
+ item_id: yupString().oneOf(Object.values(ITEM_IDS)).defined(),
12
+ display_name: yupString().defined(),
13
+ kind: planUsageKindSchema,
14
+ used: yupNumber().integer().nullable().defined(),
15
+ limit: yupNumber().integer().nullable().defined(),
16
+ remaining: yupNumber().integer().nullable().defined(),
17
+ overage: yupNumber().integer().nullable().defined(),
18
+ is_unlimited: yupBoolean().defined(),
19
+ }).defined();
20
+
21
+ export const planUsageResponseSchema = yupObject({
22
+ owner_team_id: yupString().uuid().defined(),
23
+ owner_team_display_name: yupString().defined(),
24
+ plan_id: yupString().oneOf(PLAN_IDS).defined(),
25
+ plan_display_name: yupString().defined(),
26
+ period_start_millis: yupNumber().integer().defined(),
27
+ period_end_millis: yupNumber().integer().defined(),
28
+ next_plan_id: yupString().oneOf(UPGRADE_PLAN_IDS).nullable().defined(),
29
+ rows: yupArray(planUsageRowSchema).defined(),
30
+ }).defined();
31
+
32
+ export type PlanUsageKind = yup.InferType<typeof planUsageKindSchema>;
33
+ export type PlanUsageRow = yup.InferType<typeof planUsageRowSchema>;
34
+ export type PlanUsageResponse = yup.InferType<typeof planUsageResponseSchema>;