@kyro-cms/core 0.5.4 → 0.5.5

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 (151) hide show
  1. package/dist/WebhookService-118ZTFis.d.ts +112 -0
  2. package/dist/WebhookService-AefJfqX0.d.cts +112 -0
  3. package/dist/adapter-BSvBudTG.d.cts +65 -0
  4. package/dist/adapter-CXGB2Elb.d.ts +65 -0
  5. package/dist/api-handler.cjs +26 -8
  6. package/dist/api-handler.cjs.map +1 -1
  7. package/dist/api-handler.d.cts +9 -0
  8. package/dist/api-handler.d.ts +9 -0
  9. package/dist/api-handler.js +25 -7
  10. package/dist/api-handler.js.map +1 -1
  11. package/dist/base-DvvNqnM-.d.cts +73 -0
  12. package/dist/base-eVegJ_Pr.d.ts +73 -0
  13. package/dist/bootstrap-4MH44YKG.js +6 -0
  14. package/dist/{bootstrap-PBMMLBQC.js.map → bootstrap-4MH44YKG.js.map} +1 -1
  15. package/dist/bootstrap-EE6BJZWL.cjs +31 -0
  16. package/dist/{bootstrap-QN77EVI3.cjs.map → bootstrap-EE6BJZWL.cjs.map} +1 -1
  17. package/dist/chunk-3YELQL7Z.cjs +4 -0
  18. package/dist/chunk-3YELQL7Z.cjs.map +1 -0
  19. package/dist/{chunk-AGAIUDAV.cjs → chunk-55BNRTLW.cjs} +7 -7
  20. package/dist/chunk-55BNRTLW.cjs.map +1 -0
  21. package/dist/{chunk-XJ2VYR47.cjs → chunk-5HA5OMFH.cjs} +10 -7
  22. package/dist/chunk-5HA5OMFH.cjs.map +1 -0
  23. package/dist/{chunk-C4JJEE42.js → chunk-6WXQRYTW.js} +262 -43
  24. package/dist/chunk-6WXQRYTW.js.map +1 -0
  25. package/dist/{chunk-SO25EHOE.js → chunk-AM4JKIPP.js} +180 -77
  26. package/dist/chunk-AM4JKIPP.js.map +1 -0
  27. package/dist/{chunk-VSTRLXMQ.cjs → chunk-CKVOU6MX.cjs} +4 -2
  28. package/dist/chunk-CKVOU6MX.cjs.map +1 -0
  29. package/dist/chunk-GTGRLD4Y.js +3 -0
  30. package/dist/chunk-GTGRLD4Y.js.map +1 -0
  31. package/dist/chunk-MTIRYI7F.cjs +4 -0
  32. package/dist/chunk-MTIRYI7F.cjs.map +1 -0
  33. package/dist/{chunk-342BJNBI.js → chunk-QKVA2SOG.js} +300 -6
  34. package/dist/chunk-QKVA2SOG.js.map +1 -0
  35. package/dist/chunk-QU2RFFH4.js +3 -0
  36. package/dist/chunk-QU2RFFH4.js.map +1 -0
  37. package/dist/{chunk-ATVNYGRQ.js → chunk-QYZKIPSD.js} +7 -18
  38. package/dist/chunk-QYZKIPSD.js.map +1 -0
  39. package/dist/{chunk-SYRDCLH7.cjs → chunk-R2YHJN6W.cjs} +184 -81
  40. package/dist/chunk-R2YHJN6W.cjs.map +1 -0
  41. package/dist/{chunk-IX3ABYKZ.cjs → chunk-RALQO47U.cjs} +170 -2
  42. package/dist/chunk-RALQO47U.cjs.map +1 -0
  43. package/dist/{chunk-EVEJC22G.cjs → chunk-RDRJVCL5.cjs} +37 -5
  44. package/dist/chunk-RDRJVCL5.cjs.map +1 -0
  45. package/dist/{chunk-6COM32WF.js → chunk-RP7VZUEL.js} +5 -3
  46. package/dist/chunk-RP7VZUEL.js.map +1 -0
  47. package/dist/{chunk-XR5EJS3C.js → chunk-S3FG2NY7.js} +7 -4
  48. package/dist/chunk-S3FG2NY7.js.map +1 -0
  49. package/dist/{chunk-WH4Y5MT6.js → chunk-TP5YQFIX.js} +36 -4
  50. package/dist/chunk-TP5YQFIX.js.map +1 -0
  51. package/dist/{chunk-DBUYB32X.js → chunk-TVVYZ2TH.js} +171 -3
  52. package/dist/chunk-TVVYZ2TH.js.map +1 -0
  53. package/dist/{chunk-GBH6DN5C.cjs → chunk-WBCIEYHC.cjs} +8 -18
  54. package/dist/chunk-WBCIEYHC.cjs.map +1 -0
  55. package/dist/{chunk-3ZZPZYCM.cjs → chunk-WVPOPOEQ.cjs} +269 -41
  56. package/dist/chunk-WVPOPOEQ.cjs.map +1 -0
  57. package/dist/{chunk-W3KPQX7V.cjs → chunk-XAEBVZTI.cjs} +304 -4
  58. package/dist/chunk-XAEBVZTI.cjs.map +1 -0
  59. package/dist/{chunk-Q4DNT7FO.js → chunk-XU7AFF6V.js} +6 -6
  60. package/dist/chunk-XU7AFF6V.js.map +1 -0
  61. package/dist/cli/index.cjs +6 -4
  62. package/dist/cli/index.cjs.map +1 -1
  63. package/dist/cli/index.d.cts +1 -0
  64. package/dist/cli/index.d.ts +1 -0
  65. package/dist/cli/index.js +6 -4
  66. package/dist/cli/index.js.map +1 -1
  67. package/dist/client.d.cts +12 -0
  68. package/dist/client.d.ts +12 -0
  69. package/dist/drizzle/index.cjs +18 -18
  70. package/dist/drizzle/index.d.cts +152 -0
  71. package/dist/drizzle/index.d.ts +152 -0
  72. package/dist/drizzle/index.js +3 -3
  73. package/dist/fields/index.d.cts +27 -0
  74. package/dist/fields/index.d.ts +27 -0
  75. package/dist/graphql/index.d.cts +22 -0
  76. package/dist/graphql/index.d.ts +22 -0
  77. package/dist/index-Bz9JqRGI.d.cts +86 -0
  78. package/dist/index-Bz9JqRGI.d.ts +86 -0
  79. package/dist/index-CLp-DRKA.d.ts +64 -0
  80. package/dist/index-DfO7G4kN.d.cts +64 -0
  81. package/dist/index.cjs +118 -86
  82. package/dist/index.cjs.map +1 -1
  83. package/dist/index.d.cts +1368 -0
  84. package/dist/index.d.ts +1368 -0
  85. package/dist/index.js +48 -14
  86. package/dist/index.js.map +1 -1
  87. package/dist/integration.cjs +2 -2
  88. package/dist/integration.d.cts +27 -0
  89. package/dist/integration.d.ts +27 -0
  90. package/dist/integration.js +1 -1
  91. package/dist/media-GPPTZ43E.js +4 -0
  92. package/dist/{media-HOT3O7RW.js.map → media-GPPTZ43E.js.map} +1 -1
  93. package/dist/media-XNTUFJZR.cjs +17 -0
  94. package/dist/{media-WKP5AOX2.cjs.map → media-XNTUFJZR.cjs.map} +1 -1
  95. package/dist/mongodb/index.cjs +12 -3
  96. package/dist/mongodb/index.d.cts +59 -0
  97. package/dist/mongodb/index.d.ts +59 -0
  98. package/dist/mongodb/index.js +2 -1
  99. package/dist/postgres-auth-adapter-6742WDCF.cjs +14 -0
  100. package/dist/{postgres-auth-adapter-Z463NYJZ.cjs.map → postgres-auth-adapter-6742WDCF.cjs.map} +1 -1
  101. package/dist/postgres-auth-adapter-B65BULNS.js +5 -0
  102. package/dist/{postgres-auth-adapter-7F3ECO7I.js.map → postgres-auth-adapter-B65BULNS.js.map} +1 -1
  103. package/dist/rest/index.cjs +9 -5
  104. package/dist/rest/index.d.cts +57 -0
  105. package/dist/rest/index.d.ts +57 -0
  106. package/dist/rest/index.js +7 -3
  107. package/dist/{schema-TIYTCIKX.cjs → schema-37SE2F4B.cjs} +5 -5
  108. package/dist/{schema-TIYTCIKX.cjs.map → schema-37SE2F4B.cjs.map} +1 -1
  109. package/dist/{schema-6Q4W6AE6.js → schema-5PHL5IVB.js} +3 -3
  110. package/dist/{schema-6Q4W6AE6.js.map → schema-5PHL5IVB.js.map} +1 -1
  111. package/dist/templates/index.d.cts +59 -0
  112. package/dist/templates/index.d.ts +59 -0
  113. package/dist/trpc/index.d.cts +136 -0
  114. package/dist/trpc/index.d.ts +136 -0
  115. package/dist/types-Bs1up4yP.d.ts +461 -0
  116. package/dist/types-DqN4ckOC.d.cts +130 -0
  117. package/dist/types-DqN4ckOC.d.ts +130 -0
  118. package/dist/types-J3R9nVsZ.d.cts +461 -0
  119. package/dist/types-VtjUxIMp.d.cts +246 -0
  120. package/dist/types-VtjUxIMp.d.ts +246 -0
  121. package/dist/ws/index.d.cts +88 -0
  122. package/dist/ws/index.d.ts +88 -0
  123. package/package.json +3 -2
  124. package/dist/bootstrap-PBMMLBQC.js +0 -6
  125. package/dist/bootstrap-QN77EVI3.cjs +0 -31
  126. package/dist/chunk-342BJNBI.js.map +0 -1
  127. package/dist/chunk-3ZZPZYCM.cjs.map +0 -1
  128. package/dist/chunk-6COM32WF.js.map +0 -1
  129. package/dist/chunk-7SXPHG3M.cjs +0 -67
  130. package/dist/chunk-7SXPHG3M.cjs.map +0 -1
  131. package/dist/chunk-AGAIUDAV.cjs.map +0 -1
  132. package/dist/chunk-ATVNYGRQ.js.map +0 -1
  133. package/dist/chunk-C4JJEE42.js.map +0 -1
  134. package/dist/chunk-DBUYB32X.js.map +0 -1
  135. package/dist/chunk-EVEJC22G.cjs.map +0 -1
  136. package/dist/chunk-GBH6DN5C.cjs.map +0 -1
  137. package/dist/chunk-IX3ABYKZ.cjs.map +0 -1
  138. package/dist/chunk-L4E76X2K.js +0 -57
  139. package/dist/chunk-L4E76X2K.js.map +0 -1
  140. package/dist/chunk-Q4DNT7FO.js.map +0 -1
  141. package/dist/chunk-SO25EHOE.js.map +0 -1
  142. package/dist/chunk-SYRDCLH7.cjs.map +0 -1
  143. package/dist/chunk-VSTRLXMQ.cjs.map +0 -1
  144. package/dist/chunk-W3KPQX7V.cjs.map +0 -1
  145. package/dist/chunk-WH4Y5MT6.js.map +0 -1
  146. package/dist/chunk-XJ2VYR47.cjs.map +0 -1
  147. package/dist/chunk-XR5EJS3C.js.map +0 -1
  148. package/dist/media-HOT3O7RW.js +0 -4
  149. package/dist/media-WKP5AOX2.cjs +0 -17
  150. package/dist/postgres-auth-adapter-7F3ECO7I.js +0 -5
  151. package/dist/postgres-auth-adapter-Z463NYJZ.cjs +0 -14
@@ -0,0 +1,112 @@
1
+ import { B as BaseAdapter } from './types-Bs1up4yP.js';
2
+
3
+ declare const WEBHOOK_EVENTS: {
4
+ readonly COLLECTION_CREATE: "collection.create";
5
+ readonly COLLECTION_UPDATE: "collection.update";
6
+ readonly COLLECTION_DELETE: "collection.delete";
7
+ readonly MEDIA_UPLOAD: "media.upload";
8
+ readonly MEDIA_DELETE: "media.delete";
9
+ readonly AUTH_LOGIN: "auth.login";
10
+ readonly AUTH_REGISTER: "auth.register";
11
+ readonly AUTH_LOGOUT: "auth.logout";
12
+ readonly ORDER_CREATED: "order.created";
13
+ readonly ORDER_PAID: "order.paid";
14
+ readonly ORDER_SHIPPED: "order.shipped";
15
+ readonly ORDER_DELIVERED: "order.delivered";
16
+ };
17
+ type WebhookEvent = (typeof WEBHOOK_EVENTS)[keyof typeof WEBHOOK_EVENTS];
18
+ declare const ALL_WEBHOOK_EVENTS: WebhookEvent[];
19
+ interface WebhookConfig {
20
+ id: string;
21
+ name: string;
22
+ url: string;
23
+ events: WebhookEvent[];
24
+ status: "active" | "inactive" | "error";
25
+ secret?: string;
26
+ headers?: Record<string, string>;
27
+ lastTriggered?: string;
28
+ lastError?: string;
29
+ createdAt: string;
30
+ updatedAt: string;
31
+ }
32
+ interface CreateWebhookData {
33
+ name: string;
34
+ url: string;
35
+ events: WebhookEvent[];
36
+ status?: "active" | "inactive";
37
+ secret?: string;
38
+ headers?: Record<string, string>;
39
+ }
40
+ interface UpdateWebhookData {
41
+ name?: string;
42
+ url?: string;
43
+ events?: WebhookEvent[];
44
+ status?: "active" | "inactive" | "error";
45
+ secret?: string;
46
+ headers?: Record<string, string>;
47
+ lastTriggered?: string | null;
48
+ lastError?: string | null;
49
+ }
50
+ interface WebhookPayload {
51
+ id: string;
52
+ event: WebhookEvent;
53
+ timestamp: string;
54
+ collection?: string;
55
+ operation?: "create" | "update" | "delete";
56
+ data?: unknown;
57
+ previousData?: unknown;
58
+ user?: {
59
+ id: string;
60
+ email?: string;
61
+ role?: string;
62
+ };
63
+ tenantId?: string;
64
+ metadata?: Record<string, unknown>;
65
+ }
66
+ interface WebhookDelivery {
67
+ id: string;
68
+ webhookId: string;
69
+ event: WebhookEvent;
70
+ payload: WebhookPayload;
71
+ attempt: number;
72
+ status: "pending" | "success" | "failed" | "retrying";
73
+ responseStatus?: number;
74
+ responseBody?: string;
75
+ error?: string;
76
+ duration?: number;
77
+ createdAt: string;
78
+ deliveredAt?: string;
79
+ nextRetryAt?: string;
80
+ }
81
+ interface WebhookTriggerResult {
82
+ deliveryId: string;
83
+ webhookId: string;
84
+ event: WebhookEvent;
85
+ status: "queued" | "success" | "failed";
86
+ responseStatus?: number;
87
+ duration?: number;
88
+ error?: string;
89
+ }
90
+ declare const WEBHOOK_COLLECTION = "_webhooks";
91
+ declare const WEBHOOK_DELIVERY_COLLECTION = "_webhook_deliveries";
92
+
93
+ declare class WebhookService {
94
+ private db;
95
+ constructor(db: BaseAdapter);
96
+ getWebhooks(filters?: {
97
+ status?: string;
98
+ event?: WebhookEvent;
99
+ }): Promise<WebhookConfig[]>;
100
+ getWebhookById(id: string): Promise<WebhookConfig | null>;
101
+ createWebhook(data: CreateWebhookData): Promise<WebhookConfig>;
102
+ updateWebhook(id: string, data: UpdateWebhookData): Promise<WebhookConfig | null>;
103
+ deleteWebhook(id: string): Promise<void>;
104
+ trigger(event: WebhookEvent, payloadData: Omit<WebhookPayload, "id" | "event" | "timestamp">): Promise<WebhookTriggerResult[]>;
105
+ triggerWebhook(webhook: WebhookConfig, payload: WebhookPayload): Promise<WebhookTriggerResult>;
106
+ testWebhook(webhookId: string): Promise<WebhookTriggerResult | null>;
107
+ getDeliveryHistory(webhookId: string, limit?: number): Promise<WebhookDelivery[]>;
108
+ retryDelivery(deliveryId: string): Promise<WebhookTriggerResult | null>;
109
+ }
110
+ declare function createWebhookService(db: BaseAdapter): WebhookService;
111
+
112
+ export { ALL_WEBHOOK_EVENTS as A, type CreateWebhookData as C, type UpdateWebhookData as U, type WebhookPayload as W, type WebhookDelivery as a, type WebhookConfig as b, WebhookService as c, WEBHOOK_COLLECTION as d, WEBHOOK_DELIVERY_COLLECTION as e, WEBHOOK_EVENTS as f, type WebhookEvent as g, type WebhookTriggerResult as h, createWebhookService as i };
@@ -0,0 +1,112 @@
1
+ import { B as BaseAdapter } from './types-J3R9nVsZ.cjs';
2
+
3
+ declare const WEBHOOK_EVENTS: {
4
+ readonly COLLECTION_CREATE: "collection.create";
5
+ readonly COLLECTION_UPDATE: "collection.update";
6
+ readonly COLLECTION_DELETE: "collection.delete";
7
+ readonly MEDIA_UPLOAD: "media.upload";
8
+ readonly MEDIA_DELETE: "media.delete";
9
+ readonly AUTH_LOGIN: "auth.login";
10
+ readonly AUTH_REGISTER: "auth.register";
11
+ readonly AUTH_LOGOUT: "auth.logout";
12
+ readonly ORDER_CREATED: "order.created";
13
+ readonly ORDER_PAID: "order.paid";
14
+ readonly ORDER_SHIPPED: "order.shipped";
15
+ readonly ORDER_DELIVERED: "order.delivered";
16
+ };
17
+ type WebhookEvent = (typeof WEBHOOK_EVENTS)[keyof typeof WEBHOOK_EVENTS];
18
+ declare const ALL_WEBHOOK_EVENTS: WebhookEvent[];
19
+ interface WebhookConfig {
20
+ id: string;
21
+ name: string;
22
+ url: string;
23
+ events: WebhookEvent[];
24
+ status: "active" | "inactive" | "error";
25
+ secret?: string;
26
+ headers?: Record<string, string>;
27
+ lastTriggered?: string;
28
+ lastError?: string;
29
+ createdAt: string;
30
+ updatedAt: string;
31
+ }
32
+ interface CreateWebhookData {
33
+ name: string;
34
+ url: string;
35
+ events: WebhookEvent[];
36
+ status?: "active" | "inactive";
37
+ secret?: string;
38
+ headers?: Record<string, string>;
39
+ }
40
+ interface UpdateWebhookData {
41
+ name?: string;
42
+ url?: string;
43
+ events?: WebhookEvent[];
44
+ status?: "active" | "inactive" | "error";
45
+ secret?: string;
46
+ headers?: Record<string, string>;
47
+ lastTriggered?: string | null;
48
+ lastError?: string | null;
49
+ }
50
+ interface WebhookPayload {
51
+ id: string;
52
+ event: WebhookEvent;
53
+ timestamp: string;
54
+ collection?: string;
55
+ operation?: "create" | "update" | "delete";
56
+ data?: unknown;
57
+ previousData?: unknown;
58
+ user?: {
59
+ id: string;
60
+ email?: string;
61
+ role?: string;
62
+ };
63
+ tenantId?: string;
64
+ metadata?: Record<string, unknown>;
65
+ }
66
+ interface WebhookDelivery {
67
+ id: string;
68
+ webhookId: string;
69
+ event: WebhookEvent;
70
+ payload: WebhookPayload;
71
+ attempt: number;
72
+ status: "pending" | "success" | "failed" | "retrying";
73
+ responseStatus?: number;
74
+ responseBody?: string;
75
+ error?: string;
76
+ duration?: number;
77
+ createdAt: string;
78
+ deliveredAt?: string;
79
+ nextRetryAt?: string;
80
+ }
81
+ interface WebhookTriggerResult {
82
+ deliveryId: string;
83
+ webhookId: string;
84
+ event: WebhookEvent;
85
+ status: "queued" | "success" | "failed";
86
+ responseStatus?: number;
87
+ duration?: number;
88
+ error?: string;
89
+ }
90
+ declare const WEBHOOK_COLLECTION = "_webhooks";
91
+ declare const WEBHOOK_DELIVERY_COLLECTION = "_webhook_deliveries";
92
+
93
+ declare class WebhookService {
94
+ private db;
95
+ constructor(db: BaseAdapter);
96
+ getWebhooks(filters?: {
97
+ status?: string;
98
+ event?: WebhookEvent;
99
+ }): Promise<WebhookConfig[]>;
100
+ getWebhookById(id: string): Promise<WebhookConfig | null>;
101
+ createWebhook(data: CreateWebhookData): Promise<WebhookConfig>;
102
+ updateWebhook(id: string, data: UpdateWebhookData): Promise<WebhookConfig | null>;
103
+ deleteWebhook(id: string): Promise<void>;
104
+ trigger(event: WebhookEvent, payloadData: Omit<WebhookPayload, "id" | "event" | "timestamp">): Promise<WebhookTriggerResult[]>;
105
+ triggerWebhook(webhook: WebhookConfig, payload: WebhookPayload): Promise<WebhookTriggerResult>;
106
+ testWebhook(webhookId: string): Promise<WebhookTriggerResult | null>;
107
+ getDeliveryHistory(webhookId: string, limit?: number): Promise<WebhookDelivery[]>;
108
+ retryDelivery(deliveryId: string): Promise<WebhookTriggerResult | null>;
109
+ }
110
+ declare function createWebhookService(db: BaseAdapter): WebhookService;
111
+
112
+ export { ALL_WEBHOOK_EVENTS as A, type CreateWebhookData as C, type UpdateWebhookData as U, type WebhookPayload as W, type WebhookDelivery as a, type WebhookConfig as b, WebhookService as c, WEBHOOK_COLLECTION as d, WEBHOOK_DELIVERY_COLLECTION as e, WEBHOOK_EVENTS as f, type WebhookEvent as g, type WebhookTriggerResult as h, createWebhookService as i };
@@ -0,0 +1,65 @@
1
+ import { A as AbstractBaseAdapter } from './base-DvvNqnM-.cjs';
2
+ import { F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, e as UpdateArgs, D as DeleteArgs, f as FindVersionsArgs, g as VersionRecord, h as CreateVersionArgs, i as DraftFindArgs, j as DraftSnapshot, k as DraftUpsertArgs, l as DraftDeleteArgs } from './types-J3R9nVsZ.cjs';
3
+
4
+ declare class MongoDBAdapter extends AbstractBaseAdapter {
5
+ client: any;
6
+ db: any;
7
+ private database;
8
+ private connectionString?;
9
+ private readonly draftsCollectionName;
10
+ constructor(options: {
11
+ client?: any;
12
+ database?: string;
13
+ connectionString?: string;
14
+ });
15
+ connect(): Promise<void>;
16
+ disconnect(): Promise<void>;
17
+ private getMongoCollection;
18
+ find<T>(args: FindArgs): Promise<FindResult<T>>;
19
+ findByID<T>(args: FindByIDArgs): Promise<T | null>;
20
+ create<T>(args: CreateArgs): Promise<T>;
21
+ update<T>(args: UpdateArgs): Promise<T>;
22
+ delete<T>(args: DeleteArgs): Promise<T>;
23
+ count(args: {
24
+ collection: string;
25
+ where?: Record<string, any>;
26
+ tenantID?: string;
27
+ }): Promise<number>;
28
+ findOne(args: {
29
+ collection: string;
30
+ where: Record<string, any>;
31
+ tenantID?: string;
32
+ draft?: boolean;
33
+ }): Promise<any>;
34
+ findVersions(args: FindVersionsArgs): Promise<FindResult<VersionRecord>>;
35
+ findVersionByID(args: {
36
+ collection: string;
37
+ versionId: string;
38
+ tenantID?: string;
39
+ }): Promise<VersionRecord | null>;
40
+ createVersion<T = Record<string, any>>(args: CreateVersionArgs<T>): Promise<VersionRecord<T>>;
41
+ deleteVersions(args: {
42
+ collection: string;
43
+ documentId: string;
44
+ keepLatest?: number;
45
+ tenantID?: string;
46
+ }): Promise<void>;
47
+ findDraft<T>(args: DraftFindArgs): Promise<DraftSnapshot<T> | null>;
48
+ upsertDraft<T>(args: DraftUpsertArgs<T>): Promise<DraftSnapshot<T>>;
49
+ deleteDraft(args: DraftDeleteArgs): Promise<void>;
50
+ migrate?(): Promise<void>;
51
+ private getCollectionConfig;
52
+ private buildFilter;
53
+ private getDraftId;
54
+ private docToDraft;
55
+ private buildProjection;
56
+ private processResult;
57
+ private generateId;
58
+ }
59
+ declare function createMongoDBAdapter(options: {
60
+ client?: any;
61
+ database?: string;
62
+ connectionString?: string;
63
+ }): MongoDBAdapter;
64
+
65
+ export { MongoDBAdapter as M, createMongoDBAdapter as c };
@@ -0,0 +1,65 @@
1
+ import { A as AbstractBaseAdapter } from './base-eVegJ_Pr.js';
2
+ import { F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, e as UpdateArgs, D as DeleteArgs, f as FindVersionsArgs, g as VersionRecord, h as CreateVersionArgs, i as DraftFindArgs, j as DraftSnapshot, k as DraftUpsertArgs, l as DraftDeleteArgs } from './types-Bs1up4yP.js';
3
+
4
+ declare class MongoDBAdapter extends AbstractBaseAdapter {
5
+ client: any;
6
+ db: any;
7
+ private database;
8
+ private connectionString?;
9
+ private readonly draftsCollectionName;
10
+ constructor(options: {
11
+ client?: any;
12
+ database?: string;
13
+ connectionString?: string;
14
+ });
15
+ connect(): Promise<void>;
16
+ disconnect(): Promise<void>;
17
+ private getMongoCollection;
18
+ find<T>(args: FindArgs): Promise<FindResult<T>>;
19
+ findByID<T>(args: FindByIDArgs): Promise<T | null>;
20
+ create<T>(args: CreateArgs): Promise<T>;
21
+ update<T>(args: UpdateArgs): Promise<T>;
22
+ delete<T>(args: DeleteArgs): Promise<T>;
23
+ count(args: {
24
+ collection: string;
25
+ where?: Record<string, any>;
26
+ tenantID?: string;
27
+ }): Promise<number>;
28
+ findOne(args: {
29
+ collection: string;
30
+ where: Record<string, any>;
31
+ tenantID?: string;
32
+ draft?: boolean;
33
+ }): Promise<any>;
34
+ findVersions(args: FindVersionsArgs): Promise<FindResult<VersionRecord>>;
35
+ findVersionByID(args: {
36
+ collection: string;
37
+ versionId: string;
38
+ tenantID?: string;
39
+ }): Promise<VersionRecord | null>;
40
+ createVersion<T = Record<string, any>>(args: CreateVersionArgs<T>): Promise<VersionRecord<T>>;
41
+ deleteVersions(args: {
42
+ collection: string;
43
+ documentId: string;
44
+ keepLatest?: number;
45
+ tenantID?: string;
46
+ }): Promise<void>;
47
+ findDraft<T>(args: DraftFindArgs): Promise<DraftSnapshot<T> | null>;
48
+ upsertDraft<T>(args: DraftUpsertArgs<T>): Promise<DraftSnapshot<T>>;
49
+ deleteDraft(args: DraftDeleteArgs): Promise<void>;
50
+ migrate?(): Promise<void>;
51
+ private getCollectionConfig;
52
+ private buildFilter;
53
+ private getDraftId;
54
+ private docToDraft;
55
+ private buildProjection;
56
+ private processResult;
57
+ private generateId;
58
+ }
59
+ declare function createMongoDBAdapter(options: {
60
+ client?: any;
61
+ database?: string;
62
+ connectionString?: string;
63
+ }): MongoDBAdapter;
64
+
65
+ export { MongoDBAdapter as M, createMongoDBAdapter as c };
@@ -1,20 +1,22 @@
1
1
  'use strict';
2
2
 
3
- var chunkAGAIUDAV_cjs = require('./chunk-AGAIUDAV.cjs');
3
+ var chunk55BNRTLW_cjs = require('./chunk-55BNRTLW.cjs');
4
+ var chunk5HA5OMFH_cjs = require('./chunk-5HA5OMFH.cjs');
4
5
  require('./chunk-K7JPTH3G.cjs');
5
- require('./chunk-SYRDCLH7.cjs');
6
- require('./chunk-EVEJC22G.cjs');
6
+ require('./chunk-R2YHJN6W.cjs');
7
+ require('./chunk-RDRJVCL5.cjs');
7
8
  require('./chunk-4PWRCMTQ.cjs');
8
9
  require('./chunk-ADLJSJSN.cjs');
9
10
  require('./chunk-IBG6V56E.cjs');
10
11
  require('./chunk-VJT6P4N6.cjs');
11
12
  require('./chunk-R3XIBBAW.cjs');
12
13
  require('./chunk-DVD5P72E.cjs');
13
- require('./chunk-3ZZPZYCM.cjs');
14
- require('./chunk-IX3ABYKZ.cjs');
14
+ require('./chunk-3YELQL7Z.cjs');
15
+ var chunkWVPOPOEQ_cjs = require('./chunk-WVPOPOEQ.cjs');
16
+ var chunkRALQO47U_cjs = require('./chunk-RALQO47U.cjs');
15
17
  require('./chunk-WQBRWOQT.cjs');
16
- require('./chunk-7SXPHG3M.cjs');
17
- require('./chunk-W3KPQX7V.cjs');
18
+ require('./chunk-MTIRYI7F.cjs');
19
+ var chunkXAEBVZTI_cjs = require('./chunk-XAEBVZTI.cjs');
18
20
  require('./chunk-KOCTZKPV.cjs');
19
21
  require('./chunk-G7VZBCD6.cjs');
20
22
  var projectConfig = require('kyro:config');
@@ -28,9 +30,25 @@ var ALL = async (context) => {
28
30
  if (!kyroInstance) {
29
31
  try {
30
32
  const config = projectConfig__default.default.default || projectConfig__default.default;
31
- kyroInstance = chunkAGAIUDAV_cjs.createKyro(config);
33
+ kyroInstance = chunk55BNRTLW_cjs.createKyro(config);
32
34
  await kyroInstance.init();
33
35
  await kyroInstance.loadSettings();
36
+ const db = kyroInstance.db;
37
+ let bootstrapAuthAdapter = void 0;
38
+ if (db instanceof chunkWVPOPOEQ_cjs.DrizzleAdapter && db.dialect === "postgres") {
39
+ bootstrapAuthAdapter = new chunkRALQO47U_cjs.PostgresAuthAdapter({ db: db.client });
40
+ } else if (db instanceof chunkXAEBVZTI_cjs.MongoDBAdapter) {
41
+ bootstrapAuthAdapter = new chunkXAEBVZTI_cjs.MongoDBAuthAdapter({ db: db.db });
42
+ }
43
+ if (bootstrapAuthAdapter?.connect) {
44
+ await bootstrapAuthAdapter.connect();
45
+ }
46
+ const result = await chunk5HA5OMFH_cjs.autoBootstrap(bootstrapAuthAdapter);
47
+ if (result?.success) {
48
+ console.log(`[Kyro] Admin user auto-created from env: ${result.user?.email}`);
49
+ } else if (result && !result.success) {
50
+ console.warn(`[Kyro] Admin bootstrap skipped: ${result.error}`);
51
+ }
34
52
  console.log("[Kyro API] Backend initialized via Astro Integration");
35
53
  } catch (err) {
36
54
  console.error("[Kyro API] Failed to initialize backend:", err);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api-handler.ts"],"names":["projectConfig","createKyro"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAI,YAAA,GAAoB,IAAA;AAMjB,IAAM,GAAA,GAAgB,OAAO,OAAA,KAAY;AAG9C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAASA,+BAAc,OAAA,IAAWA,8BAAA;AAExC,MAAA,YAAA,GAAeC,6BAAW,MAAM,CAAA;AAChC,MAAA,MAAM,aAAa,IAAA,EAAK;AAGxB,MAAA,MAAM,aAAa,YAAA,EAAa;AAEhC,MAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,IACpE,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,GAAG,CAAA;AAC7D,MAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU;AAAA,QACjC,KAAA,EAAO,uBAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA,EAAG;AAAA,QACF,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAC/C,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,GAAA,GAAM,aAAa,OAAA,EAAQ;AAIjC,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,MAAM,CAAA;AAClD","file":"api-handler.cjs","sourcesContent":["import type { APIRoute } from \"astro\";\nimport { createKyro } from \"./createKyro.js\";\n// @ts-ignore - handled by vite alias\nimport projectConfig from \"kyro:config\";\n\nlet kyroInstance: any = null;\n\n/**\n * Global API Handler for Astro\n * This file is injected into the host project at /api/kyro/[...path]\n */\nexport const ALL: APIRoute = async (context) => {\n // Lazy initialize Kyro instance to ensure it only happens on the server\n // and persists across requests in the same container/process.\n if (!kyroInstance) {\n try {\n // Normalize config if it's a default export\n const config = projectConfig.default || projectConfig;\n \n kyroInstance = createKyro(config);\n await kyroInstance.init();\n \n // Pre-load settings\n await kyroInstance.loadSettings();\n \n console.log(\"[Kyro API] Backend initialized via Astro Integration\");\n } catch (err) {\n console.error(\"[Kyro API] Failed to initialize backend:\", err);\n return new Response(JSON.stringify({ \n error: \"Internal Server Error\", \n message: \"Kyro failed to initialize. Check server logs.\" \n }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n }\n\n // Get the REST (Hono) app\n const app = kyroInstance.getREST();\n \n // Hono's fetch method handles the web-standard Request and returns a Response.\n // We pass context.locals to allow Hono middleware to access Astro-level data if needed.\n return app.fetch(context.request, context.locals);\n};\n"]}
1
+ {"version":3,"sources":["../src/api-handler.ts"],"names":["projectConfig","createKyro","DrizzleAdapter","PostgresAuthAdapter","MongoDBAdapter","MongoDBAuthAdapter","autoBootstrap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,IAAI,YAAA,GAAoB,IAAA;AAMjB,IAAM,GAAA,GAAgB,OAAO,OAAA,KAAY;AAG9C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAASA,+BAAc,OAAA,IAAWA,8BAAA;AAExC,MAAA,YAAA,GAAeC,6BAAW,MAAM,CAAA;AAChC,MAAA,MAAM,aAAa,IAAA,EAAK;AAGxB,MAAA,MAAM,aAAa,YAAA,EAAa;AAGhC,MAAA,MAAM,KAAK,YAAA,CAAa,EAAA;AACxB,MAAA,IAAI,oBAAA,GAA4B,KAAA,CAAA;AAChC,MAAA,IAAI,EAAA,YAAcC,gCAAA,IAAkB,EAAA,CAAG,OAAA,KAAY,UAAA,EAAY;AAC7D,QAAA,oBAAA,GAAuB,IAAIC,qCAAA,CAAoB,EAAE,EAAA,EAAI,EAAA,CAAG,QAAQ,CAAA;AAAA,MAClE,CAAA,MAAA,IAAW,cAAcC,gCAAA,EAAgB;AACvC,QAAA,oBAAA,GAAuB,IAAIC,oCAAA,CAAmB,EAAE,EAAA,EAAI,EAAA,CAAG,IAAI,CAAA;AAAA,MAC7D;AAGA,MAAA,IAAI,sBAAsB,OAAA,EAAS;AACjC,QAAA,MAAM,qBAAqB,OAAA,EAAQ;AAAA,MACrC;AAGA,MAAA,MAAM,MAAA,GAAS,MAAMC,+BAAA,CAAc,oBAAoB,CAAA;AACvD,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yCAAA,EAA4C,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,MAC9E,CAAA,MAAA,IAAW,MAAA,IAAU,CAAC,MAAA,CAAO,OAAA,EAAS;AACpC,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,gCAAA,EAAmC,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,MAChE;AAEA,MAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,IACpE,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,GAAG,CAAA;AAC7D,MAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU;AAAA,QACjC,KAAA,EAAO,uBAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA,EAAG;AAAA,QACF,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAC/C,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,GAAA,GAAM,aAAa,OAAA,EAAQ;AAIjC,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,MAAM,CAAA;AAClD","file":"api-handler.cjs","sourcesContent":["import type { APIRoute } from \"astro\";\nimport { createKyro } from \"./createKyro.js\";\nimport { autoBootstrap } from \"./auth/bootstrap.js\";\nimport { DrizzleAdapter } from \"./database/drizzle/adapter.js\";\nimport { PostgresAuthAdapter } from \"./database/drizzle/postgres-auth-adapter.js\";\nimport { MongoDBAdapter } from \"./database/mongodb/adapter.js\";\nimport { MongoDBAuthAdapter } from \"./database/mongodb/mongo-auth-adapter.js\";\n// @ts-ignore - handled by vite alias\nimport projectConfig from \"kyro:config\";\n\nlet kyroInstance: any = null;\n\n/**\n * Global API Handler for Astro\n * This file is injected into the host project at /api/kyro/[...path]\n */\nexport const ALL: APIRoute = async (context) => {\n // Lazy initialize Kyro instance to ensure it only happens on the server\n // and persists across requests in the same container/process.\n if (!kyroInstance) {\n try {\n // Normalize config if it's a default export\n const config = projectConfig.default || projectConfig;\n \n kyroInstance = createKyro(config);\n await kyroInstance.init();\n \n // Pre-load settings\n await kyroInstance.loadSettings();\n\n // Detect the right auth adapter for auto-bootstrap and table creation\n const db = kyroInstance.db;\n let bootstrapAuthAdapter: any = undefined;\n if (db instanceof DrizzleAdapter && db.dialect === \"postgres\") {\n bootstrapAuthAdapter = new PostgresAuthAdapter({ db: db.client });\n } else if (db instanceof MongoDBAdapter) {\n bootstrapAuthAdapter = new MongoDBAuthAdapter({ db: db.db });\n }\n\n // Ensure auth tables/collections exist (connect creates them if missing)\n if (bootstrapAuthAdapter?.connect) {\n await bootstrapAuthAdapter.connect();\n }\n\n // Auto-bootstrap admin user from env vars if no users exist\n const result = await autoBootstrap(bootstrapAuthAdapter);\n if (result?.success) {\n console.log(`[Kyro] Admin user auto-created from env: ${result.user?.email}`);\n } else if (result && !result.success) {\n console.warn(`[Kyro] Admin bootstrap skipped: ${result.error}`);\n }\n \n console.log(\"[Kyro API] Backend initialized via Astro Integration\");\n } catch (err) {\n console.error(\"[Kyro API] Failed to initialize backend:\", err);\n return new Response(JSON.stringify({ \n error: \"Internal Server Error\", \n message: \"Kyro failed to initialize. Check server logs.\" \n }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n }\n\n // Get the REST (Hono) app\n const app = kyroInstance.getREST();\n \n // Hono's fetch method handles the web-standard Request and returns a Response.\n // We pass context.locals to allow Hono middleware to access Astro-level data if needed.\n return app.fetch(context.request, context.locals);\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { APIRoute } from 'astro';
2
+
3
+ /**
4
+ * Global API Handler for Astro
5
+ * This file is injected into the host project at /api/kyro/[...path]
6
+ */
7
+ declare const ALL: APIRoute;
8
+
9
+ export { ALL };
@@ -0,0 +1,9 @@
1
+ import { APIRoute } from 'astro';
2
+
3
+ /**
4
+ * Global API Handler for Astro
5
+ * This file is injected into the host project at /api/kyro/[...path]
6
+ */
7
+ declare const ALL: APIRoute;
8
+
9
+ export { ALL };
@@ -1,18 +1,20 @@
1
- import { createKyro } from './chunk-Q4DNT7FO.js';
1
+ import { createKyro } from './chunk-XU7AFF6V.js';
2
+ import { autoBootstrap } from './chunk-S3FG2NY7.js';
2
3
  import './chunk-3AJE4SEG.js';
3
- import './chunk-SO25EHOE.js';
4
- import './chunk-WH4Y5MT6.js';
4
+ import './chunk-AM4JKIPP.js';
5
+ import './chunk-TP5YQFIX.js';
5
6
  import './chunk-YT7HXXVN.js';
6
7
  import './chunk-P2YW545G.js';
7
8
  import './chunk-QXIQWPAP.js';
8
9
  import './chunk-REK7AYOC.js';
9
10
  import './chunk-SDMNUYVU.js';
10
11
  import './chunk-3TPQ2BU6.js';
11
- import './chunk-C4JJEE42.js';
12
- import './chunk-DBUYB32X.js';
12
+ import './chunk-QU2RFFH4.js';
13
+ import { DrizzleAdapter } from './chunk-6WXQRYTW.js';
14
+ import { PostgresAuthAdapter } from './chunk-TVVYZ2TH.js';
13
15
  import './chunk-WOWUL7ZY.js';
14
- import './chunk-L4E76X2K.js';
15
- import './chunk-342BJNBI.js';
16
+ import './chunk-GTGRLD4Y.js';
17
+ import { MongoDBAdapter, MongoDBAuthAdapter } from './chunk-QKVA2SOG.js';
16
18
  import './chunk-A4USRVTQ.js';
17
19
  import './chunk-Z6ZWNWWR.js';
18
20
  import projectConfig from 'kyro:config';
@@ -25,6 +27,22 @@ var ALL = async (context) => {
25
27
  kyroInstance = createKyro(config);
26
28
  await kyroInstance.init();
27
29
  await kyroInstance.loadSettings();
30
+ const db = kyroInstance.db;
31
+ let bootstrapAuthAdapter = void 0;
32
+ if (db instanceof DrizzleAdapter && db.dialect === "postgres") {
33
+ bootstrapAuthAdapter = new PostgresAuthAdapter({ db: db.client });
34
+ } else if (db instanceof MongoDBAdapter) {
35
+ bootstrapAuthAdapter = new MongoDBAuthAdapter({ db: db.db });
36
+ }
37
+ if (bootstrapAuthAdapter?.connect) {
38
+ await bootstrapAuthAdapter.connect();
39
+ }
40
+ const result = await autoBootstrap(bootstrapAuthAdapter);
41
+ if (result?.success) {
42
+ console.log(`[Kyro] Admin user auto-created from env: ${result.user?.email}`);
43
+ } else if (result && !result.success) {
44
+ console.warn(`[Kyro] Admin bootstrap skipped: ${result.error}`);
45
+ }
28
46
  console.log("[Kyro API] Backend initialized via Astro Integration");
29
47
  } catch (err) {
30
48
  console.error("[Kyro API] Failed to initialize backend:", err);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAKA,IAAI,YAAA,GAAoB,IAAA;AAMjB,IAAM,GAAA,GAAgB,OAAO,OAAA,KAAY;AAG9C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,cAAc,OAAA,IAAW,aAAA;AAExC,MAAA,YAAA,GAAe,WAAW,MAAM,CAAA;AAChC,MAAA,MAAM,aAAa,IAAA,EAAK;AAGxB,MAAA,MAAM,aAAa,YAAA,EAAa;AAEhC,MAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,IACpE,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,GAAG,CAAA;AAC7D,MAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU;AAAA,QACjC,KAAA,EAAO,uBAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA,EAAG;AAAA,QACF,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAC/C,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,GAAA,GAAM,aAAa,OAAA,EAAQ;AAIjC,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,MAAM,CAAA;AAClD","file":"api-handler.js","sourcesContent":["import type { APIRoute } from \"astro\";\nimport { createKyro } from \"./createKyro.js\";\n// @ts-ignore - handled by vite alias\nimport projectConfig from \"kyro:config\";\n\nlet kyroInstance: any = null;\n\n/**\n * Global API Handler for Astro\n * This file is injected into the host project at /api/kyro/[...path]\n */\nexport const ALL: APIRoute = async (context) => {\n // Lazy initialize Kyro instance to ensure it only happens on the server\n // and persists across requests in the same container/process.\n if (!kyroInstance) {\n try {\n // Normalize config if it's a default export\n const config = projectConfig.default || projectConfig;\n \n kyroInstance = createKyro(config);\n await kyroInstance.init();\n \n // Pre-load settings\n await kyroInstance.loadSettings();\n \n console.log(\"[Kyro API] Backend initialized via Astro Integration\");\n } catch (err) {\n console.error(\"[Kyro API] Failed to initialize backend:\", err);\n return new Response(JSON.stringify({ \n error: \"Internal Server Error\", \n message: \"Kyro failed to initialize. Check server logs.\" \n }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n }\n\n // Get the REST (Hono) app\n const app = kyroInstance.getREST();\n \n // Hono's fetch method handles the web-standard Request and returns a Response.\n // We pass context.locals to allow Hono middleware to access Astro-level data if needed.\n return app.fetch(context.request, context.locals);\n};\n"]}
1
+ {"version":3,"sources":["../src/api-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAUA,IAAI,YAAA,GAAoB,IAAA;AAMjB,IAAM,GAAA,GAAgB,OAAO,OAAA,KAAY;AAG9C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,cAAc,OAAA,IAAW,aAAA;AAExC,MAAA,YAAA,GAAe,WAAW,MAAM,CAAA;AAChC,MAAA,MAAM,aAAa,IAAA,EAAK;AAGxB,MAAA,MAAM,aAAa,YAAA,EAAa;AAGhC,MAAA,MAAM,KAAK,YAAA,CAAa,EAAA;AACxB,MAAA,IAAI,oBAAA,GAA4B,KAAA,CAAA;AAChC,MAAA,IAAI,EAAA,YAAc,cAAA,IAAkB,EAAA,CAAG,OAAA,KAAY,UAAA,EAAY;AAC7D,QAAA,oBAAA,GAAuB,IAAI,mBAAA,CAAoB,EAAE,EAAA,EAAI,EAAA,CAAG,QAAQ,CAAA;AAAA,MAClE,CAAA,MAAA,IAAW,cAAc,cAAA,EAAgB;AACvC,QAAA,oBAAA,GAAuB,IAAI,kBAAA,CAAmB,EAAE,EAAA,EAAI,EAAA,CAAG,IAAI,CAAA;AAAA,MAC7D;AAGA,MAAA,IAAI,sBAAsB,OAAA,EAAS;AACjC,QAAA,MAAM,qBAAqB,OAAA,EAAQ;AAAA,MACrC;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,oBAAoB,CAAA;AACvD,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yCAAA,EAA4C,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,MAC9E,CAAA,MAAA,IAAW,MAAA,IAAU,CAAC,MAAA,CAAO,OAAA,EAAS;AACpC,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,gCAAA,EAAmC,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,MAChE;AAEA,MAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,IACpE,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,GAAG,CAAA;AAC7D,MAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU;AAAA,QACjC,KAAA,EAAO,uBAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA,EAAG;AAAA,QACF,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAC/C,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,GAAA,GAAM,aAAa,OAAA,EAAQ;AAIjC,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,MAAM,CAAA;AAClD","file":"api-handler.js","sourcesContent":["import type { APIRoute } from \"astro\";\nimport { createKyro } from \"./createKyro.js\";\nimport { autoBootstrap } from \"./auth/bootstrap.js\";\nimport { DrizzleAdapter } from \"./database/drizzle/adapter.js\";\nimport { PostgresAuthAdapter } from \"./database/drizzle/postgres-auth-adapter.js\";\nimport { MongoDBAdapter } from \"./database/mongodb/adapter.js\";\nimport { MongoDBAuthAdapter } from \"./database/mongodb/mongo-auth-adapter.js\";\n// @ts-ignore - handled by vite alias\nimport projectConfig from \"kyro:config\";\n\nlet kyroInstance: any = null;\n\n/**\n * Global API Handler for Astro\n * This file is injected into the host project at /api/kyro/[...path]\n */\nexport const ALL: APIRoute = async (context) => {\n // Lazy initialize Kyro instance to ensure it only happens on the server\n // and persists across requests in the same container/process.\n if (!kyroInstance) {\n try {\n // Normalize config if it's a default export\n const config = projectConfig.default || projectConfig;\n \n kyroInstance = createKyro(config);\n await kyroInstance.init();\n \n // Pre-load settings\n await kyroInstance.loadSettings();\n\n // Detect the right auth adapter for auto-bootstrap and table creation\n const db = kyroInstance.db;\n let bootstrapAuthAdapter: any = undefined;\n if (db instanceof DrizzleAdapter && db.dialect === \"postgres\") {\n bootstrapAuthAdapter = new PostgresAuthAdapter({ db: db.client });\n } else if (db instanceof MongoDBAdapter) {\n bootstrapAuthAdapter = new MongoDBAuthAdapter({ db: db.db });\n }\n\n // Ensure auth tables/collections exist (connect creates them if missing)\n if (bootstrapAuthAdapter?.connect) {\n await bootstrapAuthAdapter.connect();\n }\n\n // Auto-bootstrap admin user from env vars if no users exist\n const result = await autoBootstrap(bootstrapAuthAdapter);\n if (result?.success) {\n console.log(`[Kyro] Admin user auto-created from env: ${result.user?.email}`);\n } else if (result && !result.success) {\n console.warn(`[Kyro] Admin bootstrap skipped: ${result.error}`);\n }\n \n console.log(\"[Kyro API] Backend initialized via Astro Integration\");\n } catch (err) {\n console.error(\"[Kyro API] Failed to initialize backend:\", err);\n return new Response(JSON.stringify({ \n error: \"Internal Server Error\", \n message: \"Kyro failed to initialize. Check server logs.\" \n }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" }\n });\n }\n }\n\n // Get the REST (Hono) app\n const app = kyroInstance.getREST();\n \n // Hono's fetch method handles the web-standard Request and returns a Response.\n // We pass context.locals to allow Hono middleware to access Astro-level data if needed.\n return app.fetch(context.request, context.locals);\n};\n"]}
@@ -0,0 +1,73 @@
1
+ import { B as BaseAdapter, C as CollectionConfig, G as GlobalConfig, F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, e as UpdateArgs, D as DeleteArgs, f as FindVersionsArgs, g as VersionRecord, h as CreateVersionArgs, i as DraftFindArgs, j as DraftSnapshot, k as DraftUpsertArgs, l as DraftDeleteArgs } from './types-J3R9nVsZ.cjs';
2
+ import { F as Field, j as RelationshipField, U as UploadField } from './types-VtjUxIMp.cjs';
3
+
4
+ declare abstract class AbstractBaseAdapter implements BaseAdapter {
5
+ protected collections: Map<string, CollectionConfig>;
6
+ protected globals: Map<string, GlobalConfig>;
7
+ protected connected: boolean;
8
+ abstract connect(): Promise<void>;
9
+ abstract disconnect(): Promise<void>;
10
+ init(collections: CollectionConfig[], globals?: GlobalConfig[]): Promise<void>;
11
+ abstract find<T>(args: FindArgs): Promise<FindResult<T>>;
12
+ abstract findByID<T>(args: FindByIDArgs): Promise<T | null>;
13
+ abstract create<T>(args: CreateArgs): Promise<T>;
14
+ abstract update<T>(args: UpdateArgs): Promise<T>;
15
+ abstract delete<T>(args: DeleteArgs): Promise<T>;
16
+ abstract count(args: {
17
+ collection: string;
18
+ where?: Record<string, any>;
19
+ tenantID?: string;
20
+ }): Promise<number>;
21
+ abstract findOne(args: {
22
+ collection: string;
23
+ where: Record<string, any>;
24
+ tenantID?: string;
25
+ draft?: boolean;
26
+ }): Promise<any>;
27
+ abstract findVersions(args: FindVersionsArgs): Promise<FindResult<VersionRecord>>;
28
+ abstract findVersionByID(args: {
29
+ collection: string;
30
+ versionId: string;
31
+ tenantID?: string;
32
+ }): Promise<VersionRecord | null>;
33
+ abstract createVersion<T = Record<string, any>>(args: CreateVersionArgs<T>): Promise<VersionRecord<T>>;
34
+ abstract deleteVersions(args: {
35
+ collection: string;
36
+ documentId: string;
37
+ keepLatest?: number;
38
+ tenantID?: string;
39
+ }): Promise<void>;
40
+ abstract findDraft<T>(args: DraftFindArgs): Promise<DraftSnapshot<T> | null>;
41
+ abstract upsertDraft<T>(args: DraftUpsertArgs<T>): Promise<DraftSnapshot<T>>;
42
+ abstract deleteDraft(args: DraftDeleteArgs): Promise<void>;
43
+ migrate?(): Promise<void>;
44
+ rollback?(): Promise<void>;
45
+ transaction?<T>(fn: (tx: any) => Promise<T>): Promise<T>;
46
+ protected getCollection(slug: string): CollectionConfig;
47
+ protected applyTenantFilter(where?: Record<string, any>, tenantID?: string): Record<string, any>;
48
+ protected getTableName(slug: string): string;
49
+ protected prepareData(data: Record<string, any>, collection: CollectionConfig): Record<string, any>;
50
+ protected processRelationships(data: Record<string, any>, fields: Field[], depth: number): Record<string, any>;
51
+ protected parseSort(sort?: string): {
52
+ field: string;
53
+ direction: 'asc' | 'desc';
54
+ };
55
+ protected calculatePagination(page: number, limit: number, totalDocs: number): {
56
+ totalDocs: number;
57
+ limit: number;
58
+ totalPages: number;
59
+ page: number;
60
+ pagingCounter: number;
61
+ hasPrevPage: boolean;
62
+ hasNextPage: boolean;
63
+ prevPage: number | null;
64
+ nextPage: number | null;
65
+ };
66
+ protected selectFields(data: Record<string, any>, select?: string[]): Record<string, any>;
67
+ protected isRelationshipField(field: Field): field is RelationshipField;
68
+ protected isUploadField(field: Field): field is UploadField;
69
+ protected getRelationshipFields(fields: Field[]): RelationshipField[];
70
+ protected getUploadFields(fields: Field[]): UploadField[];
71
+ }
72
+
73
+ export { AbstractBaseAdapter as A };