yaxa-svelte 2.3.0 → 2.5.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.
Files changed (41) hide show
  1. package/README.md +107 -15
  2. package/dist/composables/useSSE.svelte.d.ts +53 -0
  3. package/dist/composables/useSSE.svelte.js +209 -0
  4. package/dist/composables/useSSE.test.d.ts +1 -0
  5. package/dist/composables/useSSE.test.js +122 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +1 -0
  8. package/dist/server/db/schema-pg.d.ts +262 -0
  9. package/dist/server/db/schema-pg.js +20 -0
  10. package/dist/server/db/schema-sqlite.d.ts +276 -0
  11. package/dist/server/db/schema-sqlite.js +20 -0
  12. package/dist/server/db/types.d.ts +18 -0
  13. package/dist/server/index.d.ts +4 -0
  14. package/dist/server/index.js +4 -0
  15. package/dist/server/jobs/events.d.ts +29 -0
  16. package/dist/server/jobs/events.js +74 -0
  17. package/dist/server/jobs/index.d.ts +4 -0
  18. package/dist/server/jobs/index.js +3 -0
  19. package/dist/server/jobs/jobs.test.d.ts +1 -0
  20. package/dist/server/jobs/jobs.test.js +189 -0
  21. package/dist/server/jobs/queue.d.ts +14 -0
  22. package/dist/server/jobs/queue.js +90 -0
  23. package/dist/server/jobs/runner.d.ts +12 -0
  24. package/dist/server/jobs/runner.js +176 -0
  25. package/dist/server/jobs/types.d.ts +136 -0
  26. package/dist/server/jobs/types.js +1 -0
  27. package/dist/server/openapi/handler.js +5 -3
  28. package/dist/server/openapi/openapi.test.js +13 -0
  29. package/dist/server/realtime/broadcaster.d.ts +31 -0
  30. package/dist/server/realtime/broadcaster.js +76 -0
  31. package/dist/server/realtime/index.d.ts +3 -0
  32. package/dist/server/realtime/index.js +3 -0
  33. package/dist/server/realtime/realtime.test.d.ts +1 -0
  34. package/dist/server/realtime/realtime.test.js +210 -0
  35. package/dist/server/realtime/sse.d.ts +28 -0
  36. package/dist/server/realtime/sse.js +225 -0
  37. package/dist/server/realtime/types.d.ts +116 -0
  38. package/dist/server/realtime/types.js +1 -0
  39. package/dist/testing/index.d.ts +2 -0
  40. package/dist/testing/index.js +7 -5
  41. package/package.json +1 -1
@@ -1639,3 +1639,265 @@ export declare const subscription: import("drizzle-orm/pg-core").PgTableWithColu
1639
1639
  };
1640
1640
  dialect: "pg";
1641
1641
  }>;
1642
+ export declare const job: import("drizzle-orm/pg-core").PgTableWithColumns<{
1643
+ name: "yaxa_job";
1644
+ schema: undefined;
1645
+ columns: {
1646
+ id: import("drizzle-orm/pg-core").PgColumn<{
1647
+ name: "id";
1648
+ tableName: "yaxa_job";
1649
+ dataType: "string";
1650
+ columnType: "PgText";
1651
+ data: string;
1652
+ driverParam: string;
1653
+ notNull: true;
1654
+ hasDefault: false;
1655
+ isPrimaryKey: true;
1656
+ isAutoincrement: false;
1657
+ hasRuntimeDefault: false;
1658
+ enumValues: [string, ...string[]];
1659
+ baseColumn: never;
1660
+ identity: undefined;
1661
+ generated: undefined;
1662
+ }, {}, {}>;
1663
+ queue: import("drizzle-orm/pg-core").PgColumn<{
1664
+ name: "queue";
1665
+ tableName: "yaxa_job";
1666
+ dataType: "string";
1667
+ columnType: "PgText";
1668
+ data: string;
1669
+ driverParam: string;
1670
+ notNull: true;
1671
+ hasDefault: true;
1672
+ isPrimaryKey: false;
1673
+ isAutoincrement: false;
1674
+ hasRuntimeDefault: false;
1675
+ enumValues: [string, ...string[]];
1676
+ baseColumn: never;
1677
+ identity: undefined;
1678
+ generated: undefined;
1679
+ }, {}, {}>;
1680
+ name: import("drizzle-orm/pg-core").PgColumn<{
1681
+ name: "name";
1682
+ tableName: "yaxa_job";
1683
+ dataType: "string";
1684
+ columnType: "PgText";
1685
+ data: string;
1686
+ driverParam: string;
1687
+ notNull: true;
1688
+ hasDefault: false;
1689
+ isPrimaryKey: false;
1690
+ isAutoincrement: false;
1691
+ hasRuntimeDefault: false;
1692
+ enumValues: [string, ...string[]];
1693
+ baseColumn: never;
1694
+ identity: undefined;
1695
+ generated: undefined;
1696
+ }, {}, {}>;
1697
+ payload: import("drizzle-orm/pg-core").PgColumn<{
1698
+ name: "payload";
1699
+ tableName: "yaxa_job";
1700
+ dataType: "string";
1701
+ columnType: "PgText";
1702
+ data: string;
1703
+ driverParam: string;
1704
+ notNull: true;
1705
+ hasDefault: false;
1706
+ isPrimaryKey: false;
1707
+ isAutoincrement: false;
1708
+ hasRuntimeDefault: false;
1709
+ enumValues: [string, ...string[]];
1710
+ baseColumn: never;
1711
+ identity: undefined;
1712
+ generated: undefined;
1713
+ }, {}, {}>;
1714
+ status: import("drizzle-orm/pg-core").PgColumn<{
1715
+ name: "status";
1716
+ tableName: "yaxa_job";
1717
+ dataType: "string";
1718
+ columnType: "PgText";
1719
+ data: string;
1720
+ driverParam: string;
1721
+ notNull: true;
1722
+ hasDefault: true;
1723
+ isPrimaryKey: false;
1724
+ isAutoincrement: false;
1725
+ hasRuntimeDefault: false;
1726
+ enumValues: [string, ...string[]];
1727
+ baseColumn: never;
1728
+ identity: undefined;
1729
+ generated: undefined;
1730
+ }, {}, {}>;
1731
+ priority: import("drizzle-orm/pg-core").PgColumn<{
1732
+ name: "priority";
1733
+ tableName: "yaxa_job";
1734
+ dataType: "number";
1735
+ columnType: "PgInteger";
1736
+ data: number;
1737
+ driverParam: string | number;
1738
+ notNull: true;
1739
+ hasDefault: true;
1740
+ isPrimaryKey: false;
1741
+ isAutoincrement: false;
1742
+ hasRuntimeDefault: false;
1743
+ enumValues: undefined;
1744
+ baseColumn: never;
1745
+ identity: undefined;
1746
+ generated: undefined;
1747
+ }, {}, {}>;
1748
+ attempts: import("drizzle-orm/pg-core").PgColumn<{
1749
+ name: "attempts";
1750
+ tableName: "yaxa_job";
1751
+ dataType: "number";
1752
+ columnType: "PgInteger";
1753
+ data: number;
1754
+ driverParam: string | number;
1755
+ notNull: true;
1756
+ hasDefault: true;
1757
+ isPrimaryKey: false;
1758
+ isAutoincrement: false;
1759
+ hasRuntimeDefault: false;
1760
+ enumValues: undefined;
1761
+ baseColumn: never;
1762
+ identity: undefined;
1763
+ generated: undefined;
1764
+ }, {}, {}>;
1765
+ maxAttempts: import("drizzle-orm/pg-core").PgColumn<{
1766
+ name: "max_attempts";
1767
+ tableName: "yaxa_job";
1768
+ dataType: "number";
1769
+ columnType: "PgInteger";
1770
+ data: number;
1771
+ driverParam: string | number;
1772
+ notNull: true;
1773
+ hasDefault: true;
1774
+ isPrimaryKey: false;
1775
+ isAutoincrement: false;
1776
+ hasRuntimeDefault: false;
1777
+ enumValues: undefined;
1778
+ baseColumn: never;
1779
+ identity: undefined;
1780
+ generated: undefined;
1781
+ }, {}, {}>;
1782
+ runAt: import("drizzle-orm/pg-core").PgColumn<{
1783
+ name: "run_at";
1784
+ tableName: "yaxa_job";
1785
+ dataType: "date";
1786
+ columnType: "PgTimestamp";
1787
+ data: Date;
1788
+ driverParam: string;
1789
+ notNull: true;
1790
+ hasDefault: false;
1791
+ isPrimaryKey: false;
1792
+ isAutoincrement: false;
1793
+ hasRuntimeDefault: false;
1794
+ enumValues: undefined;
1795
+ baseColumn: never;
1796
+ identity: undefined;
1797
+ generated: undefined;
1798
+ }, {}, {}>;
1799
+ lockedAt: import("drizzle-orm/pg-core").PgColumn<{
1800
+ name: "locked_at";
1801
+ tableName: "yaxa_job";
1802
+ dataType: "date";
1803
+ columnType: "PgTimestamp";
1804
+ data: Date;
1805
+ driverParam: string;
1806
+ notNull: false;
1807
+ hasDefault: false;
1808
+ isPrimaryKey: false;
1809
+ isAutoincrement: false;
1810
+ hasRuntimeDefault: false;
1811
+ enumValues: undefined;
1812
+ baseColumn: never;
1813
+ identity: undefined;
1814
+ generated: undefined;
1815
+ }, {}, {}>;
1816
+ lockedBy: import("drizzle-orm/pg-core").PgColumn<{
1817
+ name: "locked_by";
1818
+ tableName: "yaxa_job";
1819
+ dataType: "string";
1820
+ columnType: "PgText";
1821
+ data: string;
1822
+ driverParam: string;
1823
+ notNull: false;
1824
+ hasDefault: false;
1825
+ isPrimaryKey: false;
1826
+ isAutoincrement: false;
1827
+ hasRuntimeDefault: false;
1828
+ enumValues: [string, ...string[]];
1829
+ baseColumn: never;
1830
+ identity: undefined;
1831
+ generated: undefined;
1832
+ }, {}, {}>;
1833
+ failedReason: import("drizzle-orm/pg-core").PgColumn<{
1834
+ name: "failed_reason";
1835
+ tableName: "yaxa_job";
1836
+ dataType: "string";
1837
+ columnType: "PgText";
1838
+ data: string;
1839
+ driverParam: string;
1840
+ notNull: false;
1841
+ hasDefault: false;
1842
+ isPrimaryKey: false;
1843
+ isAutoincrement: false;
1844
+ hasRuntimeDefault: false;
1845
+ enumValues: [string, ...string[]];
1846
+ baseColumn: never;
1847
+ identity: undefined;
1848
+ generated: undefined;
1849
+ }, {}, {}>;
1850
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
1851
+ name: "created_at";
1852
+ tableName: "yaxa_job";
1853
+ dataType: "date";
1854
+ columnType: "PgTimestamp";
1855
+ data: Date;
1856
+ driverParam: string;
1857
+ notNull: true;
1858
+ hasDefault: false;
1859
+ isPrimaryKey: false;
1860
+ isAutoincrement: false;
1861
+ hasRuntimeDefault: false;
1862
+ enumValues: undefined;
1863
+ baseColumn: never;
1864
+ identity: undefined;
1865
+ generated: undefined;
1866
+ }, {}, {}>;
1867
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
1868
+ name: "updated_at";
1869
+ tableName: "yaxa_job";
1870
+ dataType: "date";
1871
+ columnType: "PgTimestamp";
1872
+ data: Date;
1873
+ driverParam: string;
1874
+ notNull: true;
1875
+ hasDefault: false;
1876
+ isPrimaryKey: false;
1877
+ isAutoincrement: false;
1878
+ hasRuntimeDefault: false;
1879
+ enumValues: undefined;
1880
+ baseColumn: never;
1881
+ identity: undefined;
1882
+ generated: undefined;
1883
+ }, {}, {}>;
1884
+ completedAt: import("drizzle-orm/pg-core").PgColumn<{
1885
+ name: "completed_at";
1886
+ tableName: "yaxa_job";
1887
+ dataType: "date";
1888
+ columnType: "PgTimestamp";
1889
+ data: Date;
1890
+ driverParam: string;
1891
+ notNull: false;
1892
+ hasDefault: false;
1893
+ isPrimaryKey: false;
1894
+ isAutoincrement: false;
1895
+ hasRuntimeDefault: false;
1896
+ enumValues: undefined;
1897
+ baseColumn: never;
1898
+ identity: undefined;
1899
+ generated: undefined;
1900
+ }, {}, {}>;
1901
+ };
1902
+ dialect: "pg";
1903
+ }>;
@@ -146,3 +146,23 @@ export const subscription = pgTable('subscription', {
146
146
  createdAt: timestamp('created_at', { mode: 'date' }).notNull(),
147
147
  updatedAt: timestamp('updated_at', { mode: 'date' }).notNull()
148
148
  });
149
+ // ---------------------------------------------------------------------------
150
+ // Background Jobs & Workflows Queue (PostgreSQL)
151
+ // ---------------------------------------------------------------------------
152
+ export const job = pgTable('yaxa_job', {
153
+ id: text('id').primaryKey(),
154
+ queue: text('queue').notNull().default('default'),
155
+ name: text('name').notNull(),
156
+ payload: text('payload').notNull(),
157
+ status: text('status').notNull().default('pending'), // 'pending' | 'processing' | 'completed' | 'failed'
158
+ priority: integer('priority').notNull().default(0),
159
+ attempts: integer('attempts').notNull().default(0),
160
+ maxAttempts: integer('max_attempts').notNull().default(3),
161
+ runAt: timestamp('run_at', { mode: 'date' }).notNull(),
162
+ lockedAt: timestamp('locked_at', { mode: 'date' }),
163
+ lockedBy: text('locked_by'),
164
+ failedReason: text('failed_reason'),
165
+ createdAt: timestamp('created_at', { mode: 'date' }).notNull(),
166
+ updatedAt: timestamp('updated_at', { mode: 'date' }).notNull(),
167
+ completedAt: timestamp('completed_at', { mode: 'date' })
168
+ });
@@ -1761,3 +1761,279 @@ export declare const subscription: import("drizzle-orm/sqlite-core").SQLiteTable
1761
1761
  };
1762
1762
  dialect: "sqlite";
1763
1763
  }>;
1764
+ export declare const job: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1765
+ name: "yaxa_job";
1766
+ schema: undefined;
1767
+ columns: {
1768
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1769
+ name: "id";
1770
+ tableName: "yaxa_job";
1771
+ dataType: "string";
1772
+ columnType: "SQLiteText";
1773
+ data: string;
1774
+ driverParam: string;
1775
+ notNull: true;
1776
+ hasDefault: false;
1777
+ isPrimaryKey: true;
1778
+ isAutoincrement: false;
1779
+ hasRuntimeDefault: false;
1780
+ enumValues: [string, ...string[]];
1781
+ baseColumn: never;
1782
+ identity: undefined;
1783
+ generated: undefined;
1784
+ }, {}, {
1785
+ length: number | undefined;
1786
+ }>;
1787
+ queue: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1788
+ name: "queue";
1789
+ tableName: "yaxa_job";
1790
+ dataType: "string";
1791
+ columnType: "SQLiteText";
1792
+ data: string;
1793
+ driverParam: string;
1794
+ notNull: true;
1795
+ hasDefault: true;
1796
+ isPrimaryKey: false;
1797
+ isAutoincrement: false;
1798
+ hasRuntimeDefault: false;
1799
+ enumValues: [string, ...string[]];
1800
+ baseColumn: never;
1801
+ identity: undefined;
1802
+ generated: undefined;
1803
+ }, {}, {
1804
+ length: number | undefined;
1805
+ }>;
1806
+ name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1807
+ name: "name";
1808
+ tableName: "yaxa_job";
1809
+ dataType: "string";
1810
+ columnType: "SQLiteText";
1811
+ data: string;
1812
+ driverParam: string;
1813
+ notNull: true;
1814
+ hasDefault: false;
1815
+ isPrimaryKey: false;
1816
+ isAutoincrement: false;
1817
+ hasRuntimeDefault: false;
1818
+ enumValues: [string, ...string[]];
1819
+ baseColumn: never;
1820
+ identity: undefined;
1821
+ generated: undefined;
1822
+ }, {}, {
1823
+ length: number | undefined;
1824
+ }>;
1825
+ payload: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1826
+ name: "payload";
1827
+ tableName: "yaxa_job";
1828
+ dataType: "string";
1829
+ columnType: "SQLiteText";
1830
+ data: string;
1831
+ driverParam: string;
1832
+ notNull: true;
1833
+ hasDefault: false;
1834
+ isPrimaryKey: false;
1835
+ isAutoincrement: false;
1836
+ hasRuntimeDefault: false;
1837
+ enumValues: [string, ...string[]];
1838
+ baseColumn: never;
1839
+ identity: undefined;
1840
+ generated: undefined;
1841
+ }, {}, {
1842
+ length: number | undefined;
1843
+ }>;
1844
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1845
+ name: "status";
1846
+ tableName: "yaxa_job";
1847
+ dataType: "string";
1848
+ columnType: "SQLiteText";
1849
+ data: string;
1850
+ driverParam: string;
1851
+ notNull: true;
1852
+ hasDefault: true;
1853
+ isPrimaryKey: false;
1854
+ isAutoincrement: false;
1855
+ hasRuntimeDefault: false;
1856
+ enumValues: [string, ...string[]];
1857
+ baseColumn: never;
1858
+ identity: undefined;
1859
+ generated: undefined;
1860
+ }, {}, {
1861
+ length: number | undefined;
1862
+ }>;
1863
+ priority: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1864
+ name: "priority";
1865
+ tableName: "yaxa_job";
1866
+ dataType: "number";
1867
+ columnType: "SQLiteInteger";
1868
+ data: number;
1869
+ driverParam: number;
1870
+ notNull: true;
1871
+ hasDefault: true;
1872
+ isPrimaryKey: false;
1873
+ isAutoincrement: false;
1874
+ hasRuntimeDefault: false;
1875
+ enumValues: undefined;
1876
+ baseColumn: never;
1877
+ identity: undefined;
1878
+ generated: undefined;
1879
+ }, {}, {}>;
1880
+ attempts: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1881
+ name: "attempts";
1882
+ tableName: "yaxa_job";
1883
+ dataType: "number";
1884
+ columnType: "SQLiteInteger";
1885
+ data: number;
1886
+ driverParam: number;
1887
+ notNull: true;
1888
+ hasDefault: true;
1889
+ isPrimaryKey: false;
1890
+ isAutoincrement: false;
1891
+ hasRuntimeDefault: false;
1892
+ enumValues: undefined;
1893
+ baseColumn: never;
1894
+ identity: undefined;
1895
+ generated: undefined;
1896
+ }, {}, {}>;
1897
+ maxAttempts: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1898
+ name: "max_attempts";
1899
+ tableName: "yaxa_job";
1900
+ dataType: "number";
1901
+ columnType: "SQLiteInteger";
1902
+ data: number;
1903
+ driverParam: number;
1904
+ notNull: true;
1905
+ hasDefault: true;
1906
+ isPrimaryKey: false;
1907
+ isAutoincrement: false;
1908
+ hasRuntimeDefault: false;
1909
+ enumValues: undefined;
1910
+ baseColumn: never;
1911
+ identity: undefined;
1912
+ generated: undefined;
1913
+ }, {}, {}>;
1914
+ runAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1915
+ name: "run_at";
1916
+ tableName: "yaxa_job";
1917
+ dataType: "date";
1918
+ columnType: "SQLiteTimestamp";
1919
+ data: Date;
1920
+ driverParam: number;
1921
+ notNull: true;
1922
+ hasDefault: false;
1923
+ isPrimaryKey: false;
1924
+ isAutoincrement: false;
1925
+ hasRuntimeDefault: false;
1926
+ enumValues: undefined;
1927
+ baseColumn: never;
1928
+ identity: undefined;
1929
+ generated: undefined;
1930
+ }, {}, {}>;
1931
+ lockedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1932
+ name: "locked_at";
1933
+ tableName: "yaxa_job";
1934
+ dataType: "date";
1935
+ columnType: "SQLiteTimestamp";
1936
+ data: Date;
1937
+ driverParam: number;
1938
+ notNull: false;
1939
+ hasDefault: false;
1940
+ isPrimaryKey: false;
1941
+ isAutoincrement: false;
1942
+ hasRuntimeDefault: false;
1943
+ enumValues: undefined;
1944
+ baseColumn: never;
1945
+ identity: undefined;
1946
+ generated: undefined;
1947
+ }, {}, {}>;
1948
+ lockedBy: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1949
+ name: "locked_by";
1950
+ tableName: "yaxa_job";
1951
+ dataType: "string";
1952
+ columnType: "SQLiteText";
1953
+ data: string;
1954
+ driverParam: string;
1955
+ notNull: false;
1956
+ hasDefault: false;
1957
+ isPrimaryKey: false;
1958
+ isAutoincrement: false;
1959
+ hasRuntimeDefault: false;
1960
+ enumValues: [string, ...string[]];
1961
+ baseColumn: never;
1962
+ identity: undefined;
1963
+ generated: undefined;
1964
+ }, {}, {
1965
+ length: number | undefined;
1966
+ }>;
1967
+ failedReason: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1968
+ name: "failed_reason";
1969
+ tableName: "yaxa_job";
1970
+ dataType: "string";
1971
+ columnType: "SQLiteText";
1972
+ data: string;
1973
+ driverParam: string;
1974
+ notNull: false;
1975
+ hasDefault: false;
1976
+ isPrimaryKey: false;
1977
+ isAutoincrement: false;
1978
+ hasRuntimeDefault: false;
1979
+ enumValues: [string, ...string[]];
1980
+ baseColumn: never;
1981
+ identity: undefined;
1982
+ generated: undefined;
1983
+ }, {}, {
1984
+ length: number | undefined;
1985
+ }>;
1986
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1987
+ name: "created_at";
1988
+ tableName: "yaxa_job";
1989
+ dataType: "date";
1990
+ columnType: "SQLiteTimestamp";
1991
+ data: Date;
1992
+ driverParam: number;
1993
+ notNull: true;
1994
+ hasDefault: false;
1995
+ isPrimaryKey: false;
1996
+ isAutoincrement: false;
1997
+ hasRuntimeDefault: false;
1998
+ enumValues: undefined;
1999
+ baseColumn: never;
2000
+ identity: undefined;
2001
+ generated: undefined;
2002
+ }, {}, {}>;
2003
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
2004
+ name: "updated_at";
2005
+ tableName: "yaxa_job";
2006
+ dataType: "date";
2007
+ columnType: "SQLiteTimestamp";
2008
+ data: Date;
2009
+ driverParam: number;
2010
+ notNull: true;
2011
+ hasDefault: false;
2012
+ isPrimaryKey: false;
2013
+ isAutoincrement: false;
2014
+ hasRuntimeDefault: false;
2015
+ enumValues: undefined;
2016
+ baseColumn: never;
2017
+ identity: undefined;
2018
+ generated: undefined;
2019
+ }, {}, {}>;
2020
+ completedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
2021
+ name: "completed_at";
2022
+ tableName: "yaxa_job";
2023
+ dataType: "date";
2024
+ columnType: "SQLiteTimestamp";
2025
+ data: Date;
2026
+ driverParam: number;
2027
+ notNull: false;
2028
+ hasDefault: false;
2029
+ isPrimaryKey: false;
2030
+ isAutoincrement: false;
2031
+ hasRuntimeDefault: false;
2032
+ enumValues: undefined;
2033
+ baseColumn: never;
2034
+ identity: undefined;
2035
+ generated: undefined;
2036
+ }, {}, {}>;
2037
+ };
2038
+ dialect: "sqlite";
2039
+ }>;
@@ -146,3 +146,23 @@ export const subscription = sqliteTable('subscription', {
146
146
  createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),
147
147
  updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull()
148
148
  });
149
+ // ---------------------------------------------------------------------------
150
+ // Background Jobs & Workflows Queue (SQLite / Turso)
151
+ // ---------------------------------------------------------------------------
152
+ export const job = sqliteTable('yaxa_job', {
153
+ id: text('id').primaryKey(),
154
+ queue: text('queue').notNull().default('default'),
155
+ name: text('name').notNull(),
156
+ payload: text('payload').notNull(),
157
+ status: text('status').notNull().default('pending'), // 'pending' | 'processing' | 'completed' | 'failed'
158
+ priority: integer('priority').notNull().default(0),
159
+ attempts: integer('attempts').notNull().default(0),
160
+ maxAttempts: integer('max_attempts').notNull().default(3),
161
+ runAt: integer('run_at', { mode: 'timestamp' }).notNull(),
162
+ lockedAt: integer('locked_at', { mode: 'timestamp' }),
163
+ lockedBy: text('locked_by'),
164
+ failedReason: text('failed_reason'),
165
+ createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),
166
+ updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull(),
167
+ completedAt: integer('completed_at', { mode: 'timestamp' })
168
+ });
@@ -70,3 +70,21 @@ export interface PricingTier {
70
70
  buttonText?: string;
71
71
  features: (string | PricingFeature)[];
72
72
  }
73
+ export type JobStatus = 'pending' | 'processing' | 'completed' | 'failed';
74
+ export interface YaxaJob<TPayload = any> {
75
+ id: string;
76
+ queue: string;
77
+ name: string;
78
+ payload: TPayload;
79
+ status: JobStatus;
80
+ priority: number;
81
+ attempts: number;
82
+ maxAttempts: number;
83
+ runAt: Date;
84
+ lockedAt?: Date | null;
85
+ lockedBy?: string | null;
86
+ failedReason?: string | null;
87
+ createdAt: Date;
88
+ updatedAt: Date;
89
+ completedAt?: Date | null;
90
+ }
@@ -26,3 +26,7 @@ export { yaxaEndpoint, createProblemDetails, problemResponse, isProblemDetails,
26
26
  export type { YaxaEndpointConfig, YaxaEndpointContext, YaxaEndpointSchemaConfig, YaxaInterceptor, Guard, GuardResult, ProblemDetails, CreateProblemOptions, RequireAuthOptions, RequireRoleOptions, RateLimitOptions, AnyValidator, InferValidatorOutput, ValidationOutcome, ValidationSuccess, ValidationFailure } from './endpoint/index';
27
27
  export { generateOpenApiSpec, createApiDocsHandler, createApiRegistry, globalApiRegistry, convertToJsonSchema } from './openapi/index';
28
28
  export type { OpenApiSpec31, OpenApiOperation, OpenApiParameter, OpenApiRequestBody, OpenApiResponse, GenerateOpenApiOptions, ApiDocsOptions, ApiDocsTheme, EndpointLike, EndpointMap } from './openapi/index';
29
+ export { enqueueJob, defineWorker, createJobRunner, eventBus, EventBus, parseJobDelay } from './jobs/index';
30
+ export type { JobRecord, JobDelay, EnqueueJobOptions, WorkerContext, WorkerHandler, WorkerDefinition, JobRunnerOptions, JobBatchResult, JobRunner, EventHandler, EventSubscription, IEventBus } from './jobs/index';
31
+ export { yaxaSSE, formatSSEFrame, broadcast, createBroadcaster, globalBroadcaster, MemoryBroadcaster } from './realtime/index';
32
+ export type { SSEMessage, SSEClientContext, YaxaSSEOptions, BroadcastMessage, BroadcastSubscriber, Broadcaster } from './realtime/index';
@@ -22,3 +22,7 @@ export { getS3Client, createPresignedUploadUrl, createS3UploadHandler } from './
22
22
  export { yaxaEndpoint, createProblemDetails, problemResponse, isProblemDetails, requireAuth, requireRole, rateLimit, composeGuards, validateData } from './endpoint/index';
23
23
  // Auto-Generated OpenAPI 3.1 & Interactive Docs (Milestone 3)
24
24
  export { generateOpenApiSpec, createApiDocsHandler, createApiRegistry, globalApiRegistry, convertToJsonSchema } from './openapi/index';
25
+ // Embedded Background Workflows, Job Queue & Domain Events (Milestone 6)
26
+ export { enqueueJob, defineWorker, createJobRunner, eventBus, EventBus, parseJobDelay } from './jobs/index';
27
+ // Adapter-Agnostic Real-Time Abstractions & Server-Sent Events (Milestone 5)
28
+ export { yaxaSSE, formatSSEFrame, broadcast, createBroadcaster, globalBroadcaster, MemoryBroadcaster } from './realtime/index';
@@ -0,0 +1,29 @@
1
+ import type { EventHandler, EventSubscription, IEventBus } from './types';
2
+ /**
3
+ * In-process Domain Event Bus for decoupled asynchronous event notifications.
4
+ */
5
+ export declare class EventBus implements IEventBus {
6
+ private subscribers;
7
+ private counter;
8
+ /**
9
+ * Subscribes a handler to an event.
10
+ */
11
+ subscribe<TData = any>(eventName: string, handler: EventHandler<TData>): EventSubscription;
12
+ /**
13
+ * Subscribes a handler to an event for exactly one invocation.
14
+ */
15
+ once<TData = any>(eventName: string, handler: EventHandler<TData>): EventSubscription;
16
+ /**
17
+ * Publishes an event to all registered subscribers.
18
+ * Handlers run asynchronously and errors in one subscriber do not crash others.
19
+ */
20
+ publish<TData = any>(eventName: string, data: TData): Promise<void>;
21
+ /**
22
+ * Clears all registered subscribers. Useful for test isolation.
23
+ */
24
+ clear(): void;
25
+ }
26
+ /**
27
+ * Global singleton EventBus instance.
28
+ */
29
+ export declare const eventBus: EventBus;