@tinyrack/tinyauth-server 0.0.13 → 0.0.14

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 (76) hide show
  1. package/dist/entities/oauth-client.entity.d.ts.map +1 -1
  2. package/dist/entities/oauth-client.entity.js +2 -2
  3. package/dist/entities/oauth-client.entity.js.map +1 -1
  4. package/dist/entities/user.entity.d.ts.map +1 -1
  5. package/dist/entities/user.entity.js +2 -2
  6. package/dist/entities/user.entity.js.map +1 -1
  7. package/dist/entrypoints/database/postgres/compiled-functions.d.ts +14 -14
  8. package/dist/entrypoints/database/postgres/compiled-functions.d.ts.map +1 -1
  9. package/dist/entrypoints/database/postgres/compiled-functions.js +42 -92
  10. package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
  11. package/dist/entrypoints/database/postgres/postgres.d.ts.map +1 -1
  12. package/dist/entrypoints/database/postgres/postgres.js +2 -3
  13. package/dist/entrypoints/database/postgres/postgres.js.map +1 -1
  14. package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +14 -14
  15. package/dist/entrypoints/database/sqlite/compiled-functions.d.ts.map +1 -1
  16. package/dist/entrypoints/database/sqlite/compiled-functions.js +42 -92
  17. package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -1
  18. package/dist/entrypoints/database/sqlite/sqlite.d.ts.map +1 -1
  19. package/dist/entrypoints/database/sqlite/sqlite.js +2 -3
  20. package/dist/entrypoints/database/sqlite/sqlite.js.map +1 -1
  21. package/dist/entrypoints/frontend/index.d.ts +0 -2
  22. package/dist/entrypoints/frontend/index.d.ts.map +1 -1
  23. package/dist/entrypoints/frontend/index.js +0 -1
  24. package/dist/entrypoints/frontend/index.js.map +1 -1
  25. package/dist/lib/config/client.d.ts.map +1 -1
  26. package/dist/lib/config/client.js +5 -1
  27. package/dist/lib/config/client.js.map +1 -1
  28. package/dist/lib/config/user.d.ts.map +1 -1
  29. package/dist/lib/config/user.js +5 -1
  30. package/dist/lib/config/user.js.map +1 -1
  31. package/dist/migrations/postgres/Migration20260509171036_initial.d.ts.map +1 -1
  32. package/dist/migrations/postgres/Migration20260509171036_initial.js +14 -14
  33. package/dist/migrations/postgres/Migration20260509171036_initial.js.map +1 -1
  34. package/dist/schemas/field.d.ts +2 -1
  35. package/dist/schemas/field.d.ts.map +1 -1
  36. package/dist/schemas/field.js +6 -1
  37. package/dist/schemas/field.js.map +1 -1
  38. package/dist/schemas/oauth.js +1 -1
  39. package/dist/schemas/oauth.js.map +1 -1
  40. package/dist/schemas/response.d.ts +12 -12
  41. package/dist/schemas/response.js +2 -2
  42. package/dist/schemas/response.js.map +1 -1
  43. package/package.json +4 -18
  44. package/readme.md +0 -1
  45. package/dist/entrypoints/database/d1/cli.d.ts +0 -4
  46. package/dist/entrypoints/database/d1/cli.d.ts.map +0 -1
  47. package/dist/entrypoints/database/d1/cli.js +0 -45
  48. package/dist/entrypoints/database/d1/cli.js.map +0 -1
  49. package/dist/entrypoints/database/d1/compiled-functions.d.ts +0 -691
  50. package/dist/entrypoints/database/d1/compiled-functions.d.ts.map +0 -1
  51. package/dist/entrypoints/database/d1/compiled-functions.js +0 -8616
  52. package/dist/entrypoints/database/d1/compiled-functions.js.map +0 -1
  53. package/dist/entrypoints/database/d1/d1.d.ts +0 -5
  54. package/dist/entrypoints/database/d1/d1.d.ts.map +0 -1
  55. package/dist/entrypoints/database/d1/d1.js +0 -35
  56. package/dist/entrypoints/database/d1/d1.js.map +0 -1
  57. package/dist/entrypoints/frontend/cloudflare.d.ts +0 -2
  58. package/dist/entrypoints/frontend/cloudflare.d.ts.map +0 -1
  59. package/dist/entrypoints/frontend/cloudflare.js +0 -2
  60. package/dist/entrypoints/frontend/cloudflare.js.map +0 -1
  61. package/dist/lib/database/compiled-functions.d.ts +0 -16
  62. package/dist/lib/database/compiled-functions.d.ts.map +0 -1
  63. package/dist/lib/database/compiled-functions.js +0 -66
  64. package/dist/lib/database/compiled-functions.js.map +0 -1
  65. package/dist/lib/frontend/cloudflare.d.ts +0 -12
  66. package/dist/lib/frontend/cloudflare.d.ts.map +0 -1
  67. package/dist/lib/frontend/cloudflare.js +0 -34
  68. package/dist/lib/frontend/cloudflare.js.map +0 -1
  69. package/dist/migrations/d1/Migration20260509172833_initial.d.ts +0 -5
  70. package/dist/migrations/d1/Migration20260509172833_initial.d.ts.map +0 -1
  71. package/dist/migrations/d1/Migration20260509172833_initial.js +0 -62
  72. package/dist/migrations/d1/Migration20260509172833_initial.js.map +0 -1
  73. package/dist/migrations/d1/index.d.ts +0 -3
  74. package/dist/migrations/d1/index.d.ts.map +0 -1
  75. package/dist/migrations/d1/index.js +0 -3
  76. package/dist/migrations/d1/index.js.map +0 -1
@@ -1,5 +0,0 @@
1
- import type { DatabaseConfig } from '../../../lib/config/index.ts';
2
- export declare function d1(database: {
3
- database: D1Database;
4
- }): DatabaseConfig;
5
- //# sourceMappingURL=d1.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/database/d1/d1.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AASnE,wBAAgB,EAAE,CAAC,QAAQ,EAAE;IAAE,QAAQ,EAAE,UAAU,CAAA;CAAE,GAAG,cAAc,CA0BrE"}
@@ -1,35 +0,0 @@
1
- /// <reference types="@cloudflare/workers-types" />
2
- import { defineConfig } from '@mikro-orm/core';
3
- import { Migrator } from '@mikro-orm/migrations';
4
- import { SeedManager } from '@mikro-orm/seeder';
5
- import { SqliteDriver } from '@mikro-orm/sql';
6
- import { D1Dialect } from 'kysely-d1';
7
- import { resolveCompiledFunctionsForEntities } from "../../../lib/database/compiled-functions.js";
8
- import { getDatabaseEntities, getDatabaseEntitiesWithMetadata, } from "../../../lib/database/entities.js";
9
- import { D1_MIGRATIONS } from "../../../migrations/d1/index.js";
10
- import compiledFunctions from './compiled-functions.js';
11
- export function d1(database) {
12
- return {
13
- getMikroOrmOptions: async () => {
14
- return defineConfig({
15
- driver: SqliteDriver,
16
- compiledFunctions: resolveCompiledFunctionsForEntities(getDatabaseEntitiesWithMetadata(), compiledFunctions),
17
- dbName: 'd1',
18
- driverOptions: new D1Dialect({ database: database.database }),
19
- implicitTransactions: false,
20
- entities: [...getDatabaseEntities()],
21
- extensions: [SeedManager, Migrator],
22
- migrations: {
23
- migrationsList: D1_MIGRATIONS,
24
- transactional: false,
25
- allOrNothing: false,
26
- },
27
- debug: false,
28
- });
29
- },
30
- initialize: async (orm) => {
31
- await orm.migrator.up();
32
- },
33
- };
34
- }
35
- //# sourceMappingURL=d1.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"d1.js","sourceRoot":"","sources":["../../../../src/entrypoints/database/d1/d1.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,mCAAmC,EAAE,MAAM,6CAA6C,CAAC;AAClG,OAAO,EACL,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAExD,MAAM,UAAU,EAAE,CAAC,QAAkC;IACnD,OAAO;QACL,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC7B,OAAO,YAAY,CAAC;gBAClB,MAAM,EAAE,YAAY;gBACpB,iBAAiB,EAAE,mCAAmC,CACpD,+BAA+B,EAAE,EACjC,iBAAiB,CAClB;gBACD,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,IAAI,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC7D,oBAAoB,EAAE,KAAK;gBAC3B,QAAQ,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC;gBACpC,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;gBACnC,UAAU,EAAE;oBACV,cAAc,EAAE,aAAa;oBAC7B,aAAa,EAAE,KAAK;oBACpB,YAAY,EAAE,KAAK;iBACpB;gBACD,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,GAAa,EAAE,EAAE;YAClC,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export { type CloudflareAssetsBinding, type CreateCloudflareAssetsHandlerOptions, createCloudflareAssetsHandler, } from '../../lib/frontend/cloudflare.ts';
2
- //# sourceMappingURL=cloudflare.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/frontend/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,oCAAoC,EACzC,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC"}
@@ -1,2 +0,0 @@
1
- export { createCloudflareAssetsHandler, } from "../../lib/frontend/cloudflare.js";
2
- //# sourceMappingURL=cloudflare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../src/entrypoints/frontend/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { CompiledFunctions } from '@mikro-orm/core';
2
- import type { RuntimeDatabaseEntity } from './entities.ts';
3
- /**
4
- * MikroORM v7 uses a counter-based metadata id inside `meta.uniqueName`.
5
- *
6
- * `mikro-orm compile` also keys generated functions by that value, so the
7
- * compiled keys can drift from runtime keys when entity metadata is created in
8
- * a different order during bundling or startup. In that case MikroORM falls
9
- * back to runtime code generation via `new Function(...)`, which breaks in
10
- * no-eval runtimes like Cloudflare Workers.
11
- *
12
- * To keep all database drivers on the same path, we remap the compiled keys by
13
- * stable table name to the runtime `uniqueName` before passing them to MikroORM.
14
- */
15
- export declare function resolveCompiledFunctionsForEntities(entitySchemas: readonly RuntimeDatabaseEntity[], compiledFunctions: CompiledFunctions): CompiledFunctions;
16
- //# sourceMappingURL=compiled-functions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compiled-functions.d.ts","sourceRoot":"","sources":["../../../src/lib/database/compiled-functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAkD3D;;;;;;;;;;;GAWG;AACH,wBAAgB,mCAAmC,CACjD,aAAa,EAAE,SAAS,qBAAqB,EAAE,EAC/C,iBAAiB,EAAE,iBAAiB,GACnC,iBAAiB,CAqCnB"}
@@ -1,66 +0,0 @@
1
- const compiledFunctionPrefixes = [
2
- 'hydrator',
3
- 'comparator',
4
- 'snapshotGenerator',
5
- 'pkGetter',
6
- 'pkGetterConverted',
7
- 'pkSerializer',
8
- 'resultMapper',
9
- ];
10
- function escapeRegExp(value) {
11
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
12
- }
13
- function findCompiledUniqueName(functionKeys, tableName) {
14
- const matcher = new RegExp(`^pkGetter-(${escapeRegExp(tableName)}_\\d+)$`);
15
- for (const functionKey of functionKeys) {
16
- const match = functionKey.match(matcher);
17
- if (match) {
18
- return match[1];
19
- }
20
- }
21
- return undefined;
22
- }
23
- function remapCompiledFunctionKey(functionKey, compiledUniqueName, runtimeUniqueName) {
24
- const matcher = new RegExp(`^(${compiledFunctionPrefixes.join('|')})-${escapeRegExp(compiledUniqueName)}(.*)$`);
25
- const match = functionKey.match(matcher);
26
- if (!match) {
27
- return undefined;
28
- }
29
- return `${match[1]}-${runtimeUniqueName}${match[2]}`;
30
- }
31
- /**
32
- * MikroORM v7 uses a counter-based metadata id inside `meta.uniqueName`.
33
- *
34
- * `mikro-orm compile` also keys generated functions by that value, so the
35
- * compiled keys can drift from runtime keys when entity metadata is created in
36
- * a different order during bundling or startup. In that case MikroORM falls
37
- * back to runtime code generation via `new Function(...)`, which breaks in
38
- * no-eval runtimes like Cloudflare Workers.
39
- *
40
- * To keep all database drivers on the same path, we remap the compiled keys by
41
- * stable table name to the runtime `uniqueName` before passing them to MikroORM.
42
- */
43
- export function resolveCompiledFunctionsForEntities(entitySchemas, compiledFunctions) {
44
- const runtimeCompiledFunctions = { ...compiledFunctions };
45
- const compiledFunctionEntries = Object.entries(compiledFunctions);
46
- const compiledFunctionKeys = Object.keys(compiledFunctions);
47
- for (const entitySchema of entitySchemas) {
48
- const runtimeUniqueName = entitySchema.meta.uniqueName;
49
- if (runtimeCompiledFunctions[`pkGetter-${runtimeUniqueName}`]) {
50
- continue;
51
- }
52
- const compiledUniqueName = findCompiledUniqueName(compiledFunctionKeys, entitySchema.meta.tableName);
53
- if (!compiledUniqueName) {
54
- continue;
55
- }
56
- for (const [functionKey, compiledFunction] of compiledFunctionEntries) {
57
- const runtimeFunctionKey = remapCompiledFunctionKey(functionKey, compiledUniqueName, runtimeUniqueName);
58
- if (!runtimeFunctionKey) {
59
- continue;
60
- }
61
- runtimeCompiledFunctions[runtimeFunctionKey] = compiledFunction;
62
- }
63
- }
64
- return runtimeCompiledFunctions;
65
- }
66
- //# sourceMappingURL=compiled-functions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compiled-functions.js","sourceRoot":"","sources":["../../../src/lib/database/compiled-functions.ts"],"names":[],"mappings":"AAGA,MAAM,wBAAwB,GAAG;IAC/B,UAAU;IACV,YAAY;IACZ,mBAAmB;IACnB,UAAU;IACV,mBAAmB;IACnB,cAAc;IACd,cAAc;CACN,CAAC;AAEX,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,sBAAsB,CAC7B,YAAsB,EACtB,SAAiB;IAEjB,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,cAAc,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE3E,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAC/B,WAAmB,EACnB,kBAA0B,EAC1B,iBAAyB;IAEzB,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,KAAK,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,kBAAkB,CAAC,OAAO,CACpF,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mCAAmC,CACjD,aAA+C,EAC/C,iBAAoC;IAEpC,MAAM,wBAAwB,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC1D,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClE,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE5D,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAEvD,IAAI,wBAAwB,CAAC,YAAY,iBAAiB,EAAE,CAAC,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,MAAM,kBAAkB,GAAG,sBAAsB,CAC/C,oBAAoB,EACpB,YAAY,CAAC,IAAI,CAAC,SAAS,CAC5B,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,KAAK,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,IAAI,uBAAuB,EAAE,CAAC;YACtE,MAAM,kBAAkB,GAAG,wBAAwB,CACjD,WAAW,EACX,kBAAkB,EAClB,iBAAiB,CAClB,CAAC;YAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,wBAAwB,CAAC,kBAAkB,CAAC,GAAG,gBAAgB,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
@@ -1,12 +0,0 @@
1
- import type { FrontendConfig } from '../config/frontend.ts';
2
- import type { HtmlVariables } from '../interpolate-html.ts';
3
- export interface CloudflareAssetsBinding {
4
- fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
5
- }
6
- export interface CreateCloudflareAssetsHandlerOptions {
7
- assets: CloudflareAssetsBinding;
8
- htmlVariables?: HtmlVariables | undefined;
9
- onResponse?: ((response: Response) => Response | Promise<Response>) | undefined;
10
- }
11
- export declare function createCloudflareAssetsHandler(options: CreateCloudflareAssetsHandlerOptions): FrontendConfig;
12
- //# sourceMappingURL=cloudflare.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/lib/frontend/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAM5D,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,oCAAoC;IACnD,MAAM,EAAE,uBAAuB,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,UAAU,CAAC,EACP,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GACtD,SAAS,CAAC;CACf;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oCAAoC,GAC5C,cAAc,CA0ChB"}
@@ -1,34 +0,0 @@
1
- import { interpolateHtmlResponse, resolveHtmlVariables, } from "../interpolate-html.js";
2
- export function createCloudflareAssetsHandler(options) {
3
- return ({ branding, server }) => {
4
- const htmlVariables = resolveHtmlVariables({
5
- branding,
6
- server,
7
- overrides: options.htmlVariables,
8
- });
9
- async function finalizeResponse(response) {
10
- if (options.onResponse) {
11
- return options.onResponse(response);
12
- }
13
- return response;
14
- }
15
- return async (c) => {
16
- const pathname = new URL(c.req.url).pathname;
17
- const response = await options.assets.fetch(c.req.raw);
18
- const isHtml = response.headers
19
- .get('content-type')
20
- ?.toLowerCase()
21
- .includes('text/html') ?? false;
22
- if (pathname !== '/index.html' &&
23
- /\/[^/]+\.[^/]+$/.test(pathname) &&
24
- isHtml) {
25
- return finalizeResponse(c.text('Not Found', 404));
26
- }
27
- if (c.req.method !== 'GET') {
28
- return finalizeResponse(response);
29
- }
30
- return finalizeResponse(await interpolateHtmlResponse(response, htmlVariables));
31
- };
32
- };
33
- }
34
- //# sourceMappingURL=cloudflare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../../src/lib/frontend/cloudflare.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAchC,MAAM,UAAU,6BAA6B,CAC3C,OAA6C;IAE7C,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,MAAM,aAAa,GAAG,oBAAoB,CAAC;YACzC,QAAQ;YACR,MAAM;YACN,SAAS,EAAE,OAAO,CAAC,aAAa;SACjC,CAAC,CAAC;QAEH,KAAK,UAAU,gBAAgB,CAAC,QAAkB;YAChD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,KAAK,EAAE,CAAC,EAAqB,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,MAAM,GACV,QAAQ,CAAC,OAAO;iBACb,GAAG,CAAC,cAAc,CAAC;gBACpB,EAAE,WAAW,EAAE;iBACd,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;YAEpC,IACE,QAAQ,KAAK,aAAa;gBAC1B,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChC,MAAM,EACN,CAAC;gBACD,OAAO,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC3B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,OAAO,gBAAgB,CACrB,MAAM,uBAAuB,CAAC,QAAQ,EAAE,aAAa,CAAC,CACvD,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1,5 +0,0 @@
1
- import { Migration } from '@mikro-orm/migrations';
2
- export declare class Migration20260509172833_initial extends Migration {
3
- up(): void | Promise<void>;
4
- }
5
- //# sourceMappingURL=Migration20260509172833_initial.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Migration20260509172833_initial.d.ts","sourceRoot":"","sources":["../../../src/migrations/d1/Migration20260509172833_initial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,qBAAa,+BAAgC,SAAQ,SAAS;IACnD,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAwLpC"}
@@ -1,62 +0,0 @@
1
- import { Migration } from '@mikro-orm/migrations';
2
- export class Migration20260509172833_initial extends Migration {
3
- up() {
4
- this.addSql(`create table \`bootstrap_state\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`value\` text not null) /* Runtime bootstrap metadata */;`);
5
- this.addSql(`create table \`jwt_key\` (\`kid\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`private_key\` text not null, \`public_key\` text not null, \`algorithm\` text not null default 'RS256', \`status\` text check (\`status\` in ('next', 'active', 'previous', 'retired')) not null default 'next', \`activated_at\` datetime null, \`deactivated_at\` datetime null, \`retired_at\` datetime null, \`expires_at\` datetime null) /* RSA key pairs for JWT signing (RS256) */;`);
6
- this.addSql(`create index \`jwt_key_status_idx\` on \`jwt_key\` (\`status\`);`);
7
- this.addSql(`create table \`oauth_client\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`client_id\` text not null, \`client_secret_hash\` text null, \`name\` text not null, \`grant_types\` json not null default '[]', \`response_types\` json not null default '[]', \`scopes\` json not null default '[]', \`redirect_uris\` json not null default '[]', \`enabled\` integer not null default true, \`managed_by\` text not null default 'database', \`logo_uri\` text null) /* Registered OAuth clients */;`);
8
- this.addSql(`create index \`client_client_id_unique\` on \`oauth_client\` (\`client_id\`);`);
9
- this.addSql(`create table \`pending_oauth_registration\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`token\` text not null, \`provider_id\` text not null, \`access_token\` text not null, \`refresh_token\` text null, \`expires_in\` integer null, \`token_type\` text not null, \`user_info\` json not null, \`return_url\` text null, \`expires_at\` datetime not null) /* Server-side store for pending OAuth registrations awaiting terms consent */;`);
10
- this.addSql(`create unique index \`pending_oauth_registration_token_unique\` on \`pending_oauth_registration\` (\`token\`);`);
11
- this.addSql(`create index \`pending_oauth_reg_token_idx\` on \`pending_oauth_registration\` (\`token\`);`);
12
- this.addSql(`create index \`pending_oauth_reg_expires_at_idx\` on \`pending_oauth_registration\` (\`expires_at\`);`);
13
- this.addSql(`create table \`terms\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`required\` integer not null default true, \`consent_mode\` text not null default 'explicit', \`version\` text not null, \`managed_by\` text not null default 'database') /* Terms of service definitions */;`);
14
- this.addSql(`create table \`terms_content\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`terms_id\` text not null, \`lang\` text not null, \`title\` text not null, \`type\` text not null default 'link', \`content\` text not null, constraint \`terms_content_terms_id_foreign\` foreign key (\`terms_id\`) references \`terms\` (\`id\`) on delete cascade) /* Localized content for terms */;`);
15
- this.addSql(`create index \`terms_content_terms_id_index\` on \`terms_content\` (\`terms_id\`);`);
16
- this.addSql(`create unique index \`terms_content_terms_lang_unique\` on \`terms_content\` (\`terms_id\`, \`lang\`);`);
17
- this.addSql(`create table \`user\` (\`sub\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`email\` text not null, \`email_verified\` integer not null default false, \`password_hash\` text null, \`managed_by\` text not null default 'database', \`role\` text not null default 'user', \`deleted_at\` datetime null) /* Registered users */;`);
18
- this.addSql(`create index \`user_email_unique\` on \`user\` (\`email\`);`);
19
- this.addSql(`create index \`user_deleted_at_idx\` on \`user\` (\`deleted_at\`);`);
20
- this.addSql(`create table \`user_consent\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`client_id\` text not null, \`scopes\` json not null default '[]', \`granted_at\` datetime not null, \`revoked_at\` datetime null, constraint \`user_consent_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`), constraint \`user_consent_client_id_foreign\` foreign key (\`client_id\`) references \`oauth_client\` (\`id\`)) /* User consent decisions for OAuth clients */;`);
21
- this.addSql(`create index \`user_consent_user_sub_index\` on \`user_consent\` (\`user_sub\`);`);
22
- this.addSql(`create index \`user_consent_client_id_index\` on \`user_consent\` (\`client_id\`);`);
23
- this.addSql(`create unique index \`user_consent_unique\` on \`user_consent\` (\`user_sub\`, \`client_id\`);`);
24
- this.addSql(`create table \`revoked_tokens\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`jti\` text not null, \`token_type\` text check (\`token_type\` in ('access_token', 'refresh_token')) not null, \`client_id\` text not null, \`user_sub\` text not null, \`expires_at\` datetime not null, \`revoked_at\` datetime not null, constraint \`revoked_tokens_client_id_foreign\` foreign key (\`client_id\`) references \`oauth_client\` (\`id\`), constraint \`revoked_tokens_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`)) /* Revoked OAuth tokens for invalidation before expiry */;`);
25
- this.addSql(`create unique index \`revoked_tokens_jti_unique\` on \`revoked_tokens\` (\`jti\`);`);
26
- this.addSql(`create index \`revoked_tokens_client_id_index\` on \`revoked_tokens\` (\`client_id\`);`);
27
- this.addSql(`create index \`revoked_tokens_user_sub_index\` on \`revoked_tokens\` (\`user_sub\`);`);
28
- this.addSql(`create index \`revoked_token_jti_idx\` on \`revoked_tokens\` (\`jti\`);`);
29
- this.addSql(`create index \`revoked_token_client_user_idx\` on \`revoked_tokens\` (\`client_id\`, \`user_sub\`);`);
30
- this.addSql(`create index \`revoked_token_expires_at_idx\` on \`revoked_tokens\` (\`expires_at\`);`);
31
- this.addSql(`create table \`password_reset\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`token\` text not null, \`expires_at\` datetime not null, \`used\` integer not null default false, \`used_at\` datetime null, constraint \`password_reset_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`)) /* Password reset tokens for user password recovery */;`);
32
- this.addSql(`create index \`password_reset_user_sub_idx\` on \`password_reset\` (\`user_sub\`);`);
33
- this.addSql(`create index \`password_reset_token_idx\` on \`password_reset\` (\`token\`);`);
34
- this.addSql(`create table \`oauth_code\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`code_hash\` text not null, \`client_id\` text not null, \`user_sub\` text not null, \`redirect_uri\` text null, \`scope\` json not null default '[]', \`nonce\` text not null, \`code_challenge\` text not null, \`code_challenge_method\` text check (\`code_challenge_method\` in ('S256', 'plain')) not null default 'S256', \`expired_at\` datetime not null, \`consumed_at\` datetime null, \`auth_time\` integer null, constraint \`oauth_code_client_id_foreign\` foreign key (\`client_id\`) references \`oauth_client\` (\`id\`), constraint \`oauth_code_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`)) /* Issued OAuth authorization codes */;`);
35
- this.addSql(`create unique index \`oauth_code_code_hash_unique\` on \`oauth_code\` (\`code_hash\`);`);
36
- this.addSql(`create index \`oauth_code_client_id_index\` on \`oauth_code\` (\`client_id\`);`);
37
- this.addSql(`create index \`oauth_code_user_sub_index\` on \`oauth_code\` (\`user_sub\`);`);
38
- this.addSql(`create index \`auth_code_hash_idx\` on \`oauth_code\` (\`code_hash\`);`);
39
- this.addSql(`create index \`oauth_code_client_consumed_idx\` on \`oauth_code\` (\`client_id\`, \`consumed_at\`);`);
40
- this.addSql(`create index \`oauth_code_expired_at_idx\` on \`oauth_code\` (\`expired_at\`);`);
41
- this.addSql(`create table \`email_verification\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`token\` text not null, \`expires_at\` datetime not null, \`verified\` integer not null default false, \`verified_at\` datetime null, constraint \`email_verification_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`)) /* Email verification tokens for user registration */;`);
42
- this.addSql(`create index \`email_verification_user_sub_idx\` on \`email_verification\` (\`user_sub\`);`);
43
- this.addSql(`create index \`email_verification_token_idx\` on \`email_verification\` (\`token\`);`);
44
- this.addSql(`create table \`user_oauth\` (\`id\` integer not null primary key autoincrement, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`provider_name\` text not null, \`provider_user_id\` text not null, \`access_token\` text not null, \`refresh_token\` text not null, \`expires_at\` datetime null, constraint \`user_oauth_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`)) /* OAuth accounts linked to users */;`);
45
- this.addSql(`create index \`user_oauth_user_sub_idx\` on \`user_oauth\` (\`user_sub\`);`);
46
- this.addSql(`create index \`user_oauth_user_provider_idx\` on \`user_oauth\` (\`user_sub\`, \`provider_name\`);`);
47
- this.addSql(`create unique index \`user_oauth_provider_unique\` on \`user_oauth\` (\`provider_name\`, \`provider_user_id\`);`);
48
- this.addSql(`create table \`user_passkey\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`credential_id\` text not null, \`public_key\` text not null, \`counter\` integer not null default 0, \`device_type\` text not null default 'singleDevice', \`backed_up\` integer not null default false, \`transports\` json null, \`name\` text null, \`aaguid\` text null, constraint \`user_passkey_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`) on delete cascade) /* User passkeys for WebAuthn authentication */;`);
49
- this.addSql(`create index \`user_passkey_user_sub_idx\` on \`user_passkey\` (\`user_sub\`);`);
50
- this.addSql(`create index \`user_passkey_credential_id_unique\` on \`user_passkey\` (\`credential_id\`);`);
51
- this.addSql(`create table \`user_terms_consent\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`terms_id\` text not null, \`terms_version\` text not null, \`agreed\` integer not null, \`consent_type\` text not null, \`agreed_at\` datetime not null, constraint \`user_terms_consent_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`) on delete cascade, constraint \`user_terms_consent_terms_id_foreign\` foreign key (\`terms_id\`) references \`terms\` (\`id\`) on delete cascade) /* User consent records for terms of service */;`);
52
- this.addSql(`create index \`user_terms_consent_user_sub_index\` on \`user_terms_consent\` (\`user_sub\`);`);
53
- this.addSql(`create index \`user_terms_consent_terms_id_index\` on \`user_terms_consent\` (\`terms_id\`);`);
54
- this.addSql(`create index \`user_terms_consent_user_terms_index\` on \`user_terms_consent\` (\`user_sub\`, \`terms_id\`);`);
55
- this.addSql(`create table \`user_totp\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`secret\` text not null, \`verified\` integer not null default false, \`recovery_confirmed\` integer not null default false, constraint \`user_totp_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`) on delete cascade) /* User TOTP secrets for two-factor authentication */;`);
56
- this.addSql(`create index \`user_totp_user_sub_index\` on \`user_totp\` (\`user_sub\`);`);
57
- this.addSql(`create unique index \`user_totp_user_unique\` on \`user_totp\` (\`user_sub\`);`);
58
- this.addSql(`create table \`user_totp_recovery_code\` (\`id\` text not null primary key, \`created_at\` datetime not null, \`updated_at\` datetime not null, \`user_sub\` text not null, \`code_hash\` text not null, \`used\` integer not null default false, \`used_at\` datetime null, constraint \`user_totp_recovery_code_user_sub_foreign\` foreign key (\`user_sub\`) references \`user\` (\`sub\`) on delete cascade) /* One-time recovery codes for TOTP two-factor authentication */;`);
59
- this.addSql(`create index \`user_totp_recovery_code_user_sub_idx\` on \`user_totp_recovery_code\` (\`user_sub\`);`);
60
- }
61
- }
62
- //# sourceMappingURL=Migration20260509172833_initial.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Migration20260509172833_initial.js","sourceRoot":"","sources":["../../../src/migrations/d1/Migration20260509172833_initial.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Migration20260509172833_initial } from './Migration20260509172833_initial.js';
2
- export declare const D1_MIGRATIONS: (typeof Migration20260509172833_initial)[];
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/migrations/d1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF,eAAO,MAAM,aAAa,4CAAoC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Migration20260509172833_initial } from './Migration20260509172833_initial.js';
2
- export const D1_MIGRATIONS = [Migration20260509172833_initial];
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/migrations/d1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,+BAA+B,CAAC,CAAC"}