target-supabase-sdk 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -10
- package/dist/browser.d.ts +44 -36
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +6 -45
- package/dist/browser.js.map +1 -1
- package/dist/chunks/create-logger-DyH3mZ8p.js +1028 -0
- package/dist/chunks/create-logger-DyH3mZ8p.js.map +1 -0
- package/dist/chunks/enable-log-persist-C_bSw6Kx.js +1362 -0
- package/dist/chunks/enable-log-persist-C_bSw6Kx.js.map +1 -0
- package/dist/chunks/word.interface-DLgRobKV.js +1973 -0
- package/dist/chunks/word.interface-DLgRobKV.js.map +1 -0
- package/dist/command/command.api.d.ts +1 -1
- package/dist/command/command.api.d.ts.map +1 -1
- package/dist/command/command.interface.d.ts +1 -1
- package/dist/command/command.interface.d.ts.map +1 -1
- package/dist/core.api.d.ts +10 -6
- package/dist/core.api.d.ts.map +1 -1
- package/dist/core.interface.d.ts +3 -2
- package/dist/core.interface.d.ts.map +1 -1
- package/dist/core.utils.d.ts +1 -1
- package/dist/core.utils.d.ts.map +1 -1
- package/dist/idea/idea.interface.d.ts +1 -1
- package/dist/idea/idea.interface.d.ts.map +1 -1
- package/dist/link/link.api.d.ts +1 -1
- package/dist/link/link.api.d.ts.map +1 -1
- package/dist/link/link.interface.d.ts +2 -2
- package/dist/link/link.interface.d.ts.map +1 -1
- package/dist/list/list.api.d.ts +3 -1
- package/dist/list/list.api.d.ts.map +1 -1
- package/dist/list/list.interface.d.ts +2 -2
- package/dist/list/list.interface.d.ts.map +1 -1
- package/dist/node/env/env-parsers.d.ts +19 -0
- package/dist/node/env/env-parsers.d.ts.map +1 -0
- package/dist/node/env/index.d.ts +11 -0
- package/dist/node/env/index.d.ts.map +1 -0
- package/dist/node/env/init-supabase-from-env.d.ts +17 -0
- package/dist/node/env/init-supabase-from-env.d.ts.map +1 -0
- package/dist/node/env/load-env.d.ts +20 -0
- package/dist/node/env/load-env.d.ts.map +1 -0
- package/dist/node/env/project-root.d.ts +11 -0
- package/dist/node/env/project-root.d.ts.map +1 -0
- package/dist/node/env/public-base-url.d.ts +10 -0
- package/dist/node/env/public-base-url.d.ts.map +1 -0
- package/dist/node/env/require-env.d.ts +3 -0
- package/dist/node/env/require-env.d.ts.map +1 -0
- package/dist/node/fs/json-state-store.d.ts +19 -0
- package/dist/node/fs/json-state-store.d.ts.map +1 -0
- package/dist/node/fs/read-source-file.d.ts +19 -0
- package/dist/node/fs/read-source-file.d.ts.map +1 -0
- package/dist/node/node-liveness.d.ts +30 -0
- package/dist/node/node-liveness.d.ts.map +1 -0
- package/dist/node/node-runtime.base.d.ts +21 -3
- package/dist/node/node-runtime.base.d.ts.map +1 -1
- package/dist/node/node.api.d.ts +1 -1
- package/dist/node/node.api.d.ts.map +1 -1
- package/dist/node/node.interface.d.ts +1 -6
- package/dist/node/node.interface.d.ts.map +1 -1
- package/dist/node/preload/run-service-preload.d.ts +14 -0
- package/dist/node/preload/run-service-preload.d.ts.map +1 -0
- package/dist/node/preload/service-preload.interface.d.ts +15 -0
- package/dist/node/preload/service-preload.interface.d.ts.map +1 -0
- package/dist/node/process/index.d.ts +5 -0
- package/dist/node/process/index.d.ts.map +1 -0
- package/dist/node/process/managed-child-processes.d.ts +37 -0
- package/dist/node/process/managed-child-processes.d.ts.map +1 -0
- package/dist/node/process/process-spawn.d.ts +27 -0
- package/dist/node/process/process-spawn.d.ts.map +1 -0
- package/dist/node/readiness/index.d.ts +9 -0
- package/dist/node/readiness/index.d.ts.map +1 -0
- package/dist/node/readiness/poll-until.d.ts +11 -0
- package/dist/node/readiness/poll-until.d.ts.map +1 -0
- package/dist/node/readiness/readiness-checks.d.ts +22 -0
- package/dist/node/readiness/readiness-checks.d.ts.map +1 -0
- package/dist/node/readiness/readiness.types.d.ts +12 -0
- package/dist/node/readiness/readiness.types.d.ts.map +1 -0
- package/dist/node/readiness/run-readiness-checks.d.ts +4 -0
- package/dist/node/readiness/run-readiness-checks.d.ts.map +1 -0
- package/dist/node/readiness/service-ready-gate.d.ts +26 -0
- package/dist/node/readiness/service-ready-gate.d.ts.map +1 -0
- package/dist/node.d.ts +26 -12
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +2482 -18
- package/dist/node.js.map +1 -1
- package/dist/parcel/chunk-fetch-registry.d.ts +14 -0
- package/dist/parcel/chunk-fetch-registry.d.ts.map +1 -0
- package/dist/parcel/chunk-url.utils.d.ts +9 -0
- package/dist/parcel/chunk-url.utils.d.ts.map +1 -0
- package/dist/parcel/parcel-manager.d.ts +44 -20
- package/dist/parcel/parcel-manager.d.ts.map +1 -1
- package/dist/parcel/parcel.api.d.ts +306 -0
- package/dist/parcel/parcel.api.d.ts.map +1 -0
- package/dist/parcel/parcel.interface.d.ts +26 -5
- package/dist/parcel/parcel.interface.d.ts.map +1 -1
- package/dist/parcel/parcel.service.d.ts +38 -0
- package/dist/parcel/parcel.service.d.ts.map +1 -0
- package/dist/parcel/storage-provider-registry.d.ts +17 -0
- package/dist/parcel/storage-provider-registry.d.ts.map +1 -0
- package/dist/parcel/storage-provider.types.d.ts +31 -0
- package/dist/parcel/storage-provider.types.d.ts.map +1 -0
- package/dist/preload.d.ts +7 -0
- package/dist/preload.d.ts.map +1 -0
- package/dist/preload.js +47 -0
- package/dist/preload.js.map +1 -0
- package/dist/repo/repo-context.utils.d.ts.map +1 -1
- package/dist/repo/repo-manager.d.ts +1 -1
- package/dist/repo/repo-manager.d.ts.map +1 -1
- package/dist/repo/repo.api.d.ts +1 -1
- package/dist/repo/repo.api.d.ts.map +1 -1
- package/dist/repo/repo.interface.d.ts +1 -1
- package/dist/repo/repo.interface.d.ts.map +1 -1
- package/dist/repo/repo.script-loader.d.ts +3 -3
- package/dist/repo/repo.script-loader.d.ts.map +1 -1
- package/dist/service/base.interface.d.ts +54 -57
- package/dist/service/base.interface.d.ts.map +1 -1
- package/dist/service/index.d.ts +21 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/service.api.d.ts +503 -0
- package/dist/service/service.api.d.ts.map +1 -0
- package/dist/service/service.interface.d.ts +36 -9
- package/dist/service/service.interface.d.ts.map +1 -1
- package/dist/shared/http/fetch-retry.d.ts +21 -0
- package/dist/shared/http/fetch-retry.d.ts.map +1 -0
- package/dist/shared/log/create-logger.d.ts +27 -0
- package/dist/shared/log/create-logger.d.ts.map +1 -0
- package/dist/shared/log/enable-log-persist.d.ts +28 -0
- package/dist/shared/log/enable-log-persist.d.ts.map +1 -0
- package/dist/shared/log/index.d.ts +6 -6
- package/dist/shared/log/index.d.ts.map +1 -1
- package/dist/shared/log/log-manager.d.ts +25 -27
- package/dist/shared/log/log-manager.d.ts.map +1 -1
- package/dist/shared/log/log-persist-batch-id.d.ts +13 -0
- package/dist/shared/log/log-persist-batch-id.d.ts.map +1 -0
- package/dist/shared/log/log-persist-flush.d.ts +8 -0
- package/dist/shared/log/log-persist-flush.d.ts.map +1 -0
- package/dist/shared/log/log-persist-hook.d.ts +6 -0
- package/dist/shared/log/log-persist-hook.d.ts.map +1 -0
- package/dist/shared/log/log-persist-logger.d.ts +15 -0
- package/dist/shared/log/log-persist-logger.d.ts.map +1 -0
- package/dist/shared/log/log-persist-registry.d.ts +17 -0
- package/dist/shared/log/log-persist-registry.d.ts.map +1 -0
- package/dist/shared/log/log-persist.config.d.ts +10 -0
- package/dist/shared/log/log-persist.config.d.ts.map +1 -0
- package/dist/shared/log/log-persist.d.ts +55 -0
- package/dist/shared/log/log-persist.d.ts.map +1 -0
- package/dist/shared/log/log-persist.interface.d.ts +116 -0
- package/dist/shared/log/log-persist.interface.d.ts.map +1 -0
- package/dist/shared/log/log-scope.d.ts +25 -18
- package/dist/shared/log/log-scope.d.ts.map +1 -1
- package/dist/shared/utils/fetch-url.d.ts +3 -0
- package/dist/shared/utils/fetch-url.d.ts.map +1 -0
- package/dist/shared/utils/network-error.d.ts +14 -0
- package/dist/shared/utils/network-error.d.ts.map +1 -0
- package/dist/shared/utils/safe-file-name.d.ts +14 -0
- package/dist/shared/utils/safe-file-name.d.ts.map +1 -0
- package/dist/shared/utils/sha256.d.ts +3 -0
- package/dist/shared/utils/sha256.d.ts.map +1 -0
- package/dist/supabase.d.ts +7 -2
- package/dist/supabase.d.ts.map +1 -1
- package/dist/task/index.d.ts +8 -7
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/local-task-registry.d.ts +1 -1
- package/dist/task/local-task-registry.d.ts.map +1 -1
- package/dist/task/task-manager.d.ts +7 -9
- package/dist/task/task-manager.d.ts.map +1 -1
- package/dist/{node → task}/task-node.d.ts +2 -3
- package/dist/task/task-node.d.ts.map +1 -0
- package/dist/task/task-post-validated.api.d.ts +19 -0
- package/dist/task/task-post-validated.api.d.ts.map +1 -0
- package/dist/task/task-post.api.d.ts +10 -5
- package/dist/task/task-post.api.d.ts.map +1 -1
- package/dist/task/task-queue.d.ts +7 -0
- package/dist/task/task-queue.d.ts.map +1 -0
- package/dist/task/task-repo-context.d.ts.map +1 -1
- package/dist/task/task-repo-validation.d.ts +2 -2
- package/dist/task/task-repo-validation.d.ts.map +1 -1
- package/dist/task/task.api.d.ts +13 -13
- package/dist/task/task.api.d.ts.map +1 -1
- package/dist/task/task.constant.d.ts +4 -0
- package/dist/task/task.constant.d.ts.map +1 -0
- package/dist/task/task.interface.d.ts +1 -1
- package/dist/task/task.interface.d.ts.map +1 -1
- package/dist/trigger/trigger-manager.d.ts +25 -0
- package/dist/trigger/trigger-manager.d.ts.map +1 -0
- package/dist/trigger/trigger-node.d.ts +23 -0
- package/dist/trigger/trigger-node.d.ts.map +1 -0
- package/dist/trigger/trigger.api.d.ts +4 -4
- package/dist/trigger/trigger.api.d.ts.map +1 -1
- package/dist/trigger/trigger.constant.d.ts +8 -0
- package/dist/trigger/trigger.constant.d.ts.map +1 -0
- package/dist/trigger/trigger.interface.d.ts +46 -2
- package/dist/trigger/trigger.interface.d.ts.map +1 -1
- package/dist/word/word.api.d.ts +1 -1
- package/dist/word/word.api.d.ts.map +1 -1
- package/dist/word/word.interface.d.ts +2 -2
- package/dist/word/word.interface.d.ts.map +1 -1
- package/package.json +89 -74
- package/src/browser.ts +144 -79
- package/src/command/command.api.ts +19 -17
- package/src/command/command.interface.ts +2 -3
- package/src/core.api.ts +466 -477
- package/src/core.interface.ts +63 -62
- package/src/core.utils.ts +64 -64
- package/src/idea/idea.interface.ts +3 -3
- package/src/link/link.api.ts +28 -30
- package/src/link/link.interface.ts +3 -4
- package/src/list/list.api.ts +50 -29
- package/src/list/list.interface.ts +3 -4
- package/src/node/env/env-parsers.ts +77 -0
- package/src/node/env/index.ts +10 -0
- package/src/node/env/init-supabase-from-env.ts +38 -0
- package/src/node/env/load-env.ts +67 -0
- package/src/node/env/project-root.ts +34 -0
- package/src/node/env/public-base-url.ts +18 -0
- package/src/node/env/require-env.ts +15 -0
- package/src/node/fs/json-state-store.ts +97 -0
- package/src/node/fs/read-source-file.ts +75 -0
- package/src/node/node-liveness.ts +80 -0
- package/src/node/node-runtime.base.ts +135 -104
- package/src/node/node.api.ts +11 -10
- package/src/node/node.interface.ts +1 -8
- package/src/node/node.utils.ts +1 -1
- package/src/node/preload/run-service-preload.ts +48 -0
- package/src/node/preload/service-preload.interface.ts +14 -0
- package/src/node/process/index.ts +8 -0
- package/src/node/process/managed-child-processes.ts +121 -0
- package/src/node/process/process-spawn.ts +61 -0
- package/src/node/readiness/index.ts +20 -0
- package/src/node/readiness/poll-until.ts +27 -0
- package/src/node/readiness/readiness-checks.ts +79 -0
- package/src/node/readiness/readiness.types.ts +13 -0
- package/src/node/readiness/run-readiness-checks.ts +20 -0
- package/src/node/readiness/service-ready-gate.ts +65 -0
- package/src/node.ts +138 -47
- package/src/parcel/chunk-fetch-registry.ts +96 -0
- package/src/parcel/chunk-url.utils.ts +30 -0
- package/src/parcel/parcel-manager.ts +431 -173
- package/src/parcel/parcel.api.ts +103 -0
- package/src/parcel/parcel.interface.ts +44 -23
- package/src/parcel/parcel.service.ts +79 -0
- package/src/parcel/storage-provider-registry.ts +49 -0
- package/src/parcel/storage-provider.types.ts +45 -0
- package/src/preload.ts +7 -0
- package/src/repo/repo-context.utils.ts +3 -4
- package/src/repo/repo-manager.ts +7 -20
- package/src/repo/repo.api.ts +5 -5
- package/src/repo/repo.interface.ts +1 -2
- package/src/repo/repo.script-loader.ts +4 -8
- package/src/service/base.interface.ts +81 -90
- package/src/service/index.ts +173 -0
- package/src/service/service.api.ts +294 -0
- package/src/service/service.interface.ts +49 -17
- package/src/shared/http/fetch-retry.ts +145 -0
- package/src/shared/log/create-logger.ts +51 -0
- package/src/shared/log/enable-log-persist.ts +225 -0
- package/src/shared/log/index.ts +19 -11
- package/src/shared/log/log-manager.ts +65 -69
- package/src/shared/log/log-persist-batch-id.ts +43 -0
- package/src/shared/log/log-persist-flush.ts +128 -0
- package/src/shared/log/log-persist-hook.ts +13 -0
- package/src/shared/log/log-persist-logger.ts +33 -0
- package/src/shared/log/log-persist-registry.ts +109 -0
- package/src/shared/log/log-persist.config.ts +97 -0
- package/src/shared/log/log-persist.interface.ts +132 -0
- package/src/shared/log/log-persist.ts +704 -0
- package/src/shared/log/log-scope.ts +46 -46
- package/src/shared/utils/config-path.utils.ts +1 -1
- package/src/shared/utils/fetch-url.ts +13 -0
- package/src/shared/utils/network-error.ts +152 -0
- package/src/shared/utils/safe-file-name.ts +37 -0
- package/src/shared/utils/sha256.ts +15 -0
- package/src/supabase.ts +125 -119
- package/src/task/index.ts +31 -34
- package/src/task/local-task-registry.ts +9 -17
- package/src/task/task-manager.ts +34 -35
- package/src/{node → task}/task-node.ts +91 -73
- package/src/task/task-post-validated.api.ts +47 -0
- package/src/task/task-post.api.ts +81 -98
- package/src/task/task-queue.ts +18 -0
- package/src/task/task-repo-context.ts +2 -1
- package/src/task/task-repo-validation.ts +6 -8
- package/src/task/task.api.ts +61 -25
- package/src/task/task.constant.ts +4 -0
- package/src/task/task.interface.ts +4 -7
- package/src/trigger/trigger-manager.ts +287 -0
- package/src/trigger/trigger-node.ts +80 -0
- package/src/trigger/trigger.api.ts +11 -11
- package/src/trigger/trigger.constant.ts +10 -0
- package/src/trigger/trigger.interface.ts +52 -2
- package/src/trigger/trigger.utils.ts +1 -1
- package/src/word/word.api.ts +28 -30
- package/src/word/word.interface.ts +3 -4
- package/dist/auth/auth.api.d.ts +0 -28
- package/dist/auth/auth.api.d.ts.map +0 -1
- package/dist/auth/auth.api.js +0 -51
- package/dist/auth/auth.api.js.map +0 -1
- package/dist/command/command.api.js +0 -58
- package/dist/command/command.api.js.map +0 -1
- package/dist/command/command.interface.js +0 -9
- package/dist/command/command.interface.js.map +0 -1
- package/dist/core.api.js +0 -412
- package/dist/core.api.js.map +0 -1
- package/dist/core.interface.js +0 -46
- package/dist/core.interface.js.map +0 -1
- package/dist/core.utils.js +0 -81
- package/dist/core.utils.js.map +0 -1
- package/dist/feed/feed.interface.d.ts +0 -27
- package/dist/feed/feed.interface.d.ts.map +0 -1
- package/dist/feed/feed.interface.js +0 -17
- package/dist/feed/feed.interface.js.map +0 -1
- package/dist/file/file-manager.d.ts +0 -24
- package/dist/file/file-manager.d.ts.map +0 -1
- package/dist/file/file-manager.js +0 -109
- package/dist/file/file-manager.js.map +0 -1
- package/dist/file/file.api.d.ts +0 -15
- package/dist/file/file.api.d.ts.map +0 -1
- package/dist/file/file.api.js +0 -30
- package/dist/file/file.api.js.map +0 -1
- package/dist/file/file.interface.d.ts +0 -25
- package/dist/file/file.interface.d.ts.map +0 -1
- package/dist/file/file.interface.js +0 -9
- package/dist/file/file.interface.js.map +0 -1
- package/dist/file-list/file-list.api.d.ts +0 -15
- package/dist/file-list/file-list.api.d.ts.map +0 -1
- package/dist/file-list/file-list.api.js +0 -54
- package/dist/file-list/file-list.api.js.map +0 -1
- package/dist/file-list/file-list.interface.d.ts +0 -22
- package/dist/file-list/file-list.interface.d.ts.map +0 -1
- package/dist/file-list/file-list.interface.js +0 -5
- package/dist/file-list/file-list.interface.js.map +0 -1
- package/dist/idea/idea.interface.js +0 -15
- package/dist/idea/idea.interface.js.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/link/link.api.js +0 -30
- package/dist/link/link.api.js.map +0 -1
- package/dist/link/link.interface.js +0 -7
- package/dist/link/link.interface.js.map +0 -1
- package/dist/list/list.api.js +0 -30
- package/dist/list/list.api.js.map +0 -1
- package/dist/list/list.interface.js +0 -6
- package/dist/list/list.interface.js.map +0 -1
- package/dist/node/node-log-scope.d.ts +0 -11
- package/dist/node/node-log-scope.d.ts.map +0 -1
- package/dist/node/node-log-scope.js +0 -7
- package/dist/node/node-log-scope.js.map +0 -1
- package/dist/node/node-runtime.base.js +0 -397
- package/dist/node/node-runtime.base.js.map +0 -1
- package/dist/node/node-task.preset.d.ts +0 -1
- package/dist/node/node-task.preset.d.ts.map +0 -1
- package/dist/node/node-task.preset.js +0 -14
- package/dist/node/node-task.preset.js.map +0 -1
- package/dist/node/node.api.js +0 -100
- package/dist/node/node.api.js.map +0 -1
- package/dist/node/node.interface.js +0 -19
- package/dist/node/node.interface.js.map +0 -1
- package/dist/node/node.utils.js +0 -36
- package/dist/node/node.utils.js.map +0 -1
- package/dist/node/task-node.d.ts.map +0 -1
- package/dist/node/task-node.js +0 -245
- package/dist/node/task-node.js.map +0 -1
- package/dist/node/trigger-node.d.ts +0 -18
- package/dist/node/trigger-node.d.ts.map +0 -1
- package/dist/node/trigger-node.js +0 -150
- package/dist/node/trigger-node.js.map +0 -1
- package/dist/parcel/parcel-manager.js +0 -156
- package/dist/parcel/parcel-manager.js.map +0 -1
- package/dist/parcel/parcel.interface.js +0 -11
- package/dist/parcel/parcel.interface.js.map +0 -1
- package/dist/question-list/question-list.api.d.ts +0 -13
- package/dist/question-list/question-list.api.d.ts.map +0 -1
- package/dist/question-list/question-list.api.js +0 -35
- package/dist/question-list/question-list.api.js.map +0 -1
- package/dist/question-list/question-list.interface.d.ts +0 -18
- package/dist/question-list/question-list.interface.d.ts.map +0 -1
- package/dist/question-list/question-list.interface.js +0 -5
- package/dist/question-list/question-list.interface.js.map +0 -1
- package/dist/repo/repo-context.utils.js +0 -81
- package/dist/repo/repo-context.utils.js.map +0 -1
- package/dist/repo/repo-manager.js +0 -166
- package/dist/repo/repo-manager.js.map +0 -1
- package/dist/repo/repo.api.js +0 -40
- package/dist/repo/repo.api.js.map +0 -1
- package/dist/repo/repo.interface.js +0 -8
- package/dist/repo/repo.interface.js.map +0 -1
- package/dist/repo/repo.script-loader.js +0 -108
- package/dist/repo/repo.script-loader.js.map +0 -1
- package/dist/review/review.api.d.ts +0 -14
- package/dist/review/review.api.d.ts.map +0 -1
- package/dist/review/review.api.js +0 -133
- package/dist/review/review.api.js.map +0 -1
- package/dist/review/review.interface.d.ts +0 -24
- package/dist/review/review.interface.d.ts.map +0 -1
- package/dist/review/review.interface.js +0 -10
- package/dist/review/review.interface.js.map +0 -1
- package/dist/review-v2/apis/post-review-setting.api.d.ts +0 -12
- package/dist/review-v2/apis/post-review-setting.api.d.ts.map +0 -1
- package/dist/review-v2/apis/post-review-setting.api.js +0 -27
- package/dist/review-v2/apis/post-review-setting.api.js.map +0 -1
- package/dist/review-v2/apis/post-review.api.d.ts +0 -13
- package/dist/review-v2/apis/post-review.api.d.ts.map +0 -1
- package/dist/review-v2/apis/post-review.api.js +0 -46
- package/dist/review-v2/apis/post-review.api.js.map +0 -1
- package/dist/review-v2/review-setting.interface.d.ts +0 -23
- package/dist/review-v2/review-setting.interface.d.ts.map +0 -1
- package/dist/review-v2/review-setting.interface.js +0 -5
- package/dist/review-v2/review-setting.interface.js.map +0 -1
- package/dist/review-v2/review.interface.d.ts +0 -20
- package/dist/review-v2/review.interface.d.ts.map +0 -1
- package/dist/review-v2/review.interface.js +0 -5
- package/dist/review-v2/review.interface.js.map +0 -1
- package/dist/service/api.interface.d.ts +0 -35
- package/dist/service/api.interface.d.ts.map +0 -1
- package/dist/service/api.interface.js +0 -12
- package/dist/service/api.interface.js.map +0 -1
- package/dist/service/base.interface.js +0 -7
- package/dist/service/base.interface.js.map +0 -1
- package/dist/service/service.interface.js +0 -11
- package/dist/service/service.interface.js.map +0 -1
- package/dist/shared/log/create-api-logger.d.ts +0 -21
- package/dist/shared/log/create-api-logger.d.ts.map +0 -1
- package/dist/shared/log/create-api-logger.js +0 -19
- package/dist/shared/log/create-api-logger.js.map +0 -1
- package/dist/shared/log/index.js +0 -10
- package/dist/shared/log/index.js.map +0 -1
- package/dist/shared/log/log-manager.js +0 -237
- package/dist/shared/log/log-manager.js.map +0 -1
- package/dist/shared/log/log-scope.js +0 -70
- package/dist/shared/log/log-scope.js.map +0 -1
- package/dist/shared/utils/config-path.utils.js +0 -85
- package/dist/shared/utils/config-path.utils.js.map +0 -1
- package/dist/shared/utils/error.utils.js +0 -15
- package/dist/shared/utils/error.utils.js.map +0 -1
- package/dist/shared/utils/id.utils.js +0 -5
- package/dist/shared/utils/id.utils.js.map +0 -1
- package/dist/supabase.js +0 -100
- package/dist/supabase.js.map +0 -1
- package/dist/task/index.js +0 -14
- package/dist/task/index.js.map +0 -1
- package/dist/task/local-task-registry.js +0 -214
- package/dist/task/local-task-registry.js.map +0 -1
- package/dist/task/task-manager.js +0 -196
- package/dist/task/task-manager.js.map +0 -1
- package/dist/task/task-post.api.js +0 -91
- package/dist/task/task-post.api.js.map +0 -1
- package/dist/task/task-repo-context.js +0 -12
- package/dist/task/task-repo-context.js.map +0 -1
- package/dist/task/task-repo-validation.js +0 -96
- package/dist/task/task-repo-validation.js.map +0 -1
- package/dist/task/task.api.js +0 -303
- package/dist/task/task.api.js.map +0 -1
- package/dist/task/task.interface.js +0 -36
- package/dist/task/task.interface.js.map +0 -1
- package/dist/task/task.utils.js +0 -2
- package/dist/task/task.utils.js.map +0 -1
- package/dist/trigger/trigger.api.js +0 -125
- package/dist/trigger/trigger.api.js.map +0 -1
- package/dist/trigger/trigger.interface.js +0 -11
- package/dist/trigger/trigger.interface.js.map +0 -1
- package/dist/trigger/trigger.utils.js +0 -39
- package/dist/trigger/trigger.utils.js.map +0 -1
- package/dist/word/word.api.js +0 -30
- package/dist/word/word.api.js.map +0 -1
- package/dist/word/word.interface.js +0 -6
- package/dist/word/word.interface.js.map +0 -1
- package/src/auth/auth.api.ts +0 -87
- package/src/feed/feed.interface.ts +0 -33
- package/src/file/file-manager.ts +0 -145
- package/src/file/file.api.ts +0 -43
- package/src/file/file.interface.ts +0 -30
- package/src/file-list/file-list.api.ts +0 -64
- package/src/file-list/file-list.interface.ts +0 -24
- package/src/node/node-log-scope.ts +0 -15
- package/src/node/node-task.preset.ts +0 -13
- package/src/node/trigger-node.ts +0 -180
- package/src/question-list/question-list.api.ts +0 -42
- package/src/question-list/question-list.interface.ts +0 -21
- package/src/review/review.api.ts +0 -145
- package/src/review/review.interface.ts +0 -26
- package/src/review-v2/apis/post-review-setting.api.ts +0 -35
- package/src/review-v2/apis/post-review.api.ts +0 -59
- package/src/review-v2/review-setting.interface.ts +0 -26
- package/src/review-v2/review.interface.ts +0 -23
- package/src/service/api.interface.ts +0 -47
- package/src/shared/log/create-api-logger.ts +0 -36
package/src/auth/auth.api.ts
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { SupabaseInitializer } from "../supabase";
|
|
2
|
-
import { generateResponse } from "../core.interface";
|
|
3
|
-
import { handleSupabaseError } from "../core.utils";
|
|
4
|
-
|
|
5
|
-
const supabase = SupabaseInitializer.getInstance();
|
|
6
|
-
|
|
7
|
-
export interface LoginPayload {
|
|
8
|
-
email: string;
|
|
9
|
-
password: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface RegisterPayload {
|
|
13
|
-
email: string;
|
|
14
|
-
password: string;
|
|
15
|
-
confirmPassword?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface User {
|
|
19
|
-
id: string;
|
|
20
|
-
email: string;
|
|
21
|
-
created_at: string;
|
|
22
|
-
last_sign_in_at?: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// 用户注册
|
|
26
|
-
export const registerUser = async ({ email, password }: RegisterPayload) => {
|
|
27
|
-
const { data, error } = await supabase.authClient!.auth.signUp({
|
|
28
|
-
email,
|
|
29
|
-
password,
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
if (error) {
|
|
33
|
-
handleSupabaseError("registerUser", error, "Registration failed. Please try again.");
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return generateResponse.success(data);
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
// 用户登录
|
|
40
|
-
export const loginUser = async ({ email, password }: LoginPayload) => {
|
|
41
|
-
const { data, error } = await supabase.authClient!.auth.signInWithPassword({
|
|
42
|
-
email,
|
|
43
|
-
password,
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
if (error) {
|
|
47
|
-
handleSupabaseError("loginUser", error, "Login failed. Please check your credentials.");
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return generateResponse.success(data);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
// 用户登出
|
|
54
|
-
export const logoutUser = async () => {
|
|
55
|
-
const { error } = await supabase.authClient!.auth.signOut();
|
|
56
|
-
|
|
57
|
-
if (error) {
|
|
58
|
-
handleSupabaseError("logoutUser", error, "Logout failed.");
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return generateResponse.success();
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// 获取当前用户
|
|
65
|
-
export const getCurrentUser = async () => {
|
|
66
|
-
const {
|
|
67
|
-
data: { user },
|
|
68
|
-
error,
|
|
69
|
-
} = await supabase.authClient!.auth.getUser();
|
|
70
|
-
|
|
71
|
-
if (error) {
|
|
72
|
-
handleSupabaseError("getCurrentUser", error, "Failed to get current user.");
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return generateResponse.success<User | null>(user as User | null);
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
// 重置密码
|
|
79
|
-
export const resetPassword = async (email: string) => {
|
|
80
|
-
const { error } = await supabase.authClient!.auth.resetPasswordForEmail(email);
|
|
81
|
-
|
|
82
|
-
if (error) {
|
|
83
|
-
handleSupabaseError("resetPassword", error, "Password reset request failed.");
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return generateResponse.success();
|
|
87
|
-
};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Target } from "../core.interface";
|
|
2
|
-
|
|
3
|
-
export interface Feed extends Target {
|
|
4
|
-
category: CategoryFeed;
|
|
5
|
-
details: FeedDetails;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export enum CategoryFeed {
|
|
9
|
-
FEED = "feed",
|
|
10
|
-
DOC = "doc",
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface FeedDetails {
|
|
14
|
-
manifestVersion: number;
|
|
15
|
-
list: FeedItem[];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export enum FeedItemType {
|
|
19
|
-
/** Plain Target */
|
|
20
|
-
TEXT = "TEXT",
|
|
21
|
-
/** Parcel */
|
|
22
|
-
IMAGE = "IMAGE",
|
|
23
|
-
/** Parcel */
|
|
24
|
-
VIDEO = "VIDEO",
|
|
25
|
-
/** TODO Review */
|
|
26
|
-
// REVIEW = "REVIEW",
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface FeedItem {
|
|
30
|
-
index: number;
|
|
31
|
-
type: FeedItemType;
|
|
32
|
-
refTargetId: string;
|
|
33
|
-
}
|
package/src/file/file-manager.ts
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import type { FileDetails, FilePreview } from "./file.interface";
|
|
2
|
-
|
|
3
|
-
const FILE_MANIFEST_VERSION = 1;
|
|
4
|
-
const PREVIEW_MANIFEST_VERSION = 1;
|
|
5
|
-
|
|
6
|
-
export class FileManagerError extends Error {
|
|
7
|
-
constructor(
|
|
8
|
-
message: string,
|
|
9
|
-
cause?: unknown
|
|
10
|
-
) {
|
|
11
|
-
super(message, { cause });
|
|
12
|
-
this.name = "FileManagerError";
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface CreatePreviewProps {
|
|
17
|
-
refTargetId: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function createPreviewV0(props: CreatePreviewProps): FilePreview {
|
|
21
|
-
return {
|
|
22
|
-
manifestVersion: PREVIEW_MANIFEST_VERSION,
|
|
23
|
-
refTargetId: props.refTargetId,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface CreateFileProps {
|
|
28
|
-
manifestVersion: 0
|
|
29
|
-
/** "abc.1" */
|
|
30
|
-
value: string;
|
|
31
|
-
filePath: string;
|
|
32
|
-
needParcel: boolean;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function sha256Hex(buffer: ArrayBuffer): Promise<string> {
|
|
36
|
-
try {
|
|
37
|
-
const hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", buffer);
|
|
38
|
-
const bytes = new Uint8Array(hashBuffer);
|
|
39
|
-
return Array.from(bytes)
|
|
40
|
-
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
41
|
-
.join("");
|
|
42
|
-
} catch (error) {
|
|
43
|
-
throw new FileManagerError("FileManager.sha256Hex: 計算文件 hash 失敗", error);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function isLikelyLocalPath(path: string): boolean {
|
|
48
|
-
// Windows: C:\foo\bar.txt / \\server\share ; POSIX absolute: /foo/bar
|
|
49
|
-
return /^[a-zA-Z]:[\\/]/.test(path) || path.startsWith("\\\\") || path.startsWith("/");
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function isFetchableResource(path: string): boolean {
|
|
53
|
-
return /^(https?:|blob:|data:)/.test(path) || path.startsWith("./") || path.startsWith("../");
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function getBaseName(path: string): string {
|
|
57
|
-
const parts = path.split(/[\\/]/).filter(Boolean);
|
|
58
|
-
return parts.at(-1) ?? "unknown";
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function readLocalFileByPicker(filePath: string): Promise<ArrayBuffer> {
|
|
62
|
-
try {
|
|
63
|
-
if (!("showOpenFilePicker" in globalThis) || typeof globalThis.showOpenFilePicker !== "function") {
|
|
64
|
-
throw new FileManagerError(
|
|
65
|
-
"FileManager.readLocalFileByPicker: 當前瀏覽器不支持 File System Access API",
|
|
66
|
-
{ filePath }
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const [handle] = await globalThis.showOpenFilePicker({
|
|
71
|
-
multiple: false,
|
|
72
|
-
});
|
|
73
|
-
const file = await handle.getFile();
|
|
74
|
-
const expectedName = getBaseName(filePath);
|
|
75
|
-
if (expectedName !== "unknown" && file.name !== expectedName) {
|
|
76
|
-
throw new FileManagerError(
|
|
77
|
-
"FileManager.readLocalFileByPicker: 選擇的文件與目標路徑不一致",
|
|
78
|
-
{ expectedName, actualName: file.name, filePath }
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
return file.arrayBuffer();
|
|
82
|
-
} catch (error) {
|
|
83
|
-
throw new FileManagerError("FileManager.readLocalFileByPicker: 本地文件讀取失敗", error);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async function readFileBufferFromPath(filePath: string): Promise<ArrayBuffer> {
|
|
88
|
-
try {
|
|
89
|
-
if (isLikelyLocalPath(filePath) && !isFetchableResource(filePath)) {
|
|
90
|
-
return readLocalFileByPicker(filePath);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const response = await fetch(filePath);
|
|
94
|
-
if (!response.ok) {
|
|
95
|
-
throw new FileManagerError(
|
|
96
|
-
`FileManager.readFileBufferFromPath: 無法讀取文件內容 (${response.status})`,
|
|
97
|
-
{ status: response.status, statusText: response.statusText, filePath }
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
return response.arrayBuffer();
|
|
101
|
-
} catch (error) {
|
|
102
|
-
throw new FileManagerError("FileManager.readFileBufferFromPath: 讀取文件失敗", error);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async function createFileV0(props: CreateFileProps): Promise<FileDetails> {
|
|
107
|
-
try {
|
|
108
|
-
const fileBuffer = await readFileBufferFromPath(props.filePath);
|
|
109
|
-
const contentHash = await sha256Hex(fileBuffer);
|
|
110
|
-
|
|
111
|
-
return {
|
|
112
|
-
manifestVersion: props.manifestVersion ?? FILE_MANIFEST_VERSION,
|
|
113
|
-
value: props.value,
|
|
114
|
-
// Hash file bytes directly so checksum can be verified by re-hashing the same content.
|
|
115
|
-
hash: contentHash,
|
|
116
|
-
preview: null,
|
|
117
|
-
url: props.needParcel ? null : props.filePath,
|
|
118
|
-
parcelId: null,
|
|
119
|
-
};
|
|
120
|
-
} catch (error) {
|
|
121
|
-
throw new FileManagerError("FileManager.createFile: 建立文件 metadata 失敗", error);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
async function verifyFileHash(filePath: string, expectedHash: string): Promise<boolean> {
|
|
126
|
-
try {
|
|
127
|
-
const normalizedExpected = expectedHash.trim().toLowerCase();
|
|
128
|
-
const fileBuffer = await readFileBufferFromPath(filePath);
|
|
129
|
-
const actualHash = await sha256Hex(fileBuffer);
|
|
130
|
-
return actualHash === normalizedExpected;
|
|
131
|
-
} catch (error) {
|
|
132
|
-
throw new FileManagerError("FileManager.verifyFileHash: 文件 hash 驗證失敗", error);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const createFile = createFileV0;
|
|
137
|
-
const createPreview = createPreviewV0;
|
|
138
|
-
|
|
139
|
-
const FileManager = {
|
|
140
|
-
createFile,
|
|
141
|
-
createPreview,
|
|
142
|
-
verifyFileHash,
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
export { FileManager };
|
package/src/file/file.api.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { createTarget } from "../core.api";
|
|
2
|
-
import { BaseValidator } from "../core.utils";
|
|
3
|
-
import { File, FileDetails } from "./file.interface";
|
|
4
|
-
|
|
5
|
-
export interface PostFileCreatePayload {
|
|
6
|
-
name: File["name"];
|
|
7
|
-
value: File["value"];
|
|
8
|
-
category: File["category"];
|
|
9
|
-
details: FileDetails;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export class PostFileValidator extends BaseValidator<PostFileCreatePayload> {
|
|
13
|
-
protected requiredFields: (keyof PostFileCreatePayload)[] = ["name", "value", "category", "details"];
|
|
14
|
-
protected optionalFields: (keyof PostFileCreatePayload)[] = [];
|
|
15
|
-
|
|
16
|
-
constructor() {
|
|
17
|
-
super();
|
|
18
|
-
// Add custom
|
|
19
|
-
this.addCustomValidator((val) => {
|
|
20
|
-
return true;
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
export const postFileCreate = async (payload: PostFileCreatePayload) => {
|
|
28
|
-
return createTarget<File, PostFileCreatePayload>({
|
|
29
|
-
payload: payload,
|
|
30
|
-
validator: PostFileValidator,
|
|
31
|
-
createFn: (validPayload) => {
|
|
32
|
-
const { name, value, category, details } = validPayload;
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
name,
|
|
36
|
-
category,
|
|
37
|
-
value,
|
|
38
|
-
tagList: [],
|
|
39
|
-
details,
|
|
40
|
-
};
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Target } from "../core.interface";
|
|
2
|
-
|
|
3
|
-
export enum CategoryFile {
|
|
4
|
-
VIDEO = "video",
|
|
5
|
-
IMAGE = "image",
|
|
6
|
-
TEXT = "text",
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface File extends Target {
|
|
10
|
-
details: FileDetails;
|
|
11
|
-
category: CategoryFile;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface FileDetails {
|
|
15
|
-
manifestVersion: number;
|
|
16
|
-
/** "abc.1" 唯一键 */
|
|
17
|
-
value: string;
|
|
18
|
-
hash: string | null;
|
|
19
|
-
preview: FilePreview | null;
|
|
20
|
-
/** Quickly access the file */
|
|
21
|
-
url: string | null;
|
|
22
|
-
parcelId: string | null;
|
|
23
|
-
/** TODO 消費與改動歷史 */
|
|
24
|
-
// reviewList?: string[];
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export interface FilePreview {
|
|
28
|
-
manifestVersion: number;
|
|
29
|
-
refTargetId: string;
|
|
30
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { createTarget } from "../core.api";
|
|
2
|
-
import { BaseValidator } from "../core.utils";
|
|
3
|
-
import { FileList, CategoryFileList, FileListDetails } from "./file-list.interface";
|
|
4
|
-
|
|
5
|
-
export class PostCreateFileListValidator extends BaseValidator<PostCreateFileListPayload> {
|
|
6
|
-
protected requiredFields: (keyof PostCreateFileListPayload)[] = ["name", "dirName", "dirSize", "storageUrl"];
|
|
7
|
-
protected optionalFields: (keyof PostCreateFileListPayload)[] = [];
|
|
8
|
-
|
|
9
|
-
constructor() {
|
|
10
|
-
super();
|
|
11
|
-
// Add custom
|
|
12
|
-
this.addCustomValidator((val) => {
|
|
13
|
-
return true;
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface PostCreateFileListPayload {
|
|
19
|
-
name: FileListDetails["name"];
|
|
20
|
-
dirName: FileListDetails["dirName"];
|
|
21
|
-
dirSize: FileListDetails["dirSize"];
|
|
22
|
-
storageUrl: FileListDetails["storageUrl"];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const postCreateFileList = async (payload: PostCreateFileListPayload) => {
|
|
26
|
-
return createTarget<FileList, PostCreateFileListPayload>({
|
|
27
|
-
payload: payload,
|
|
28
|
-
validator: PostCreateFileListValidator,
|
|
29
|
-
checkRedundancyFilterList: [
|
|
30
|
-
{
|
|
31
|
-
field: "category",
|
|
32
|
-
operator: "eq",
|
|
33
|
-
value: CategoryFileList.FILE_LIST,
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
field: "details->>dirName",
|
|
37
|
-
operator: "eq",
|
|
38
|
-
value: payload.dirName,
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
field: "details->>storageUrl",
|
|
42
|
-
operator: "eq",
|
|
43
|
-
value: payload.storageUrl,
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
createFn: (validPayload) => {
|
|
47
|
-
const { name, dirName, dirSize, storageUrl = "" } = validPayload;
|
|
48
|
-
const details: FileListDetails = {
|
|
49
|
-
name,
|
|
50
|
-
dirName,
|
|
51
|
-
dirSize,
|
|
52
|
-
storageUrl,
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
return {
|
|
56
|
-
name: validPayload.name,
|
|
57
|
-
category: CategoryFileList.FILE_LIST,
|
|
58
|
-
value: dirName,
|
|
59
|
-
tagList: [],
|
|
60
|
-
details,
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Target } from "../core.interface";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Use storageUrl+dirName to identify the file list
|
|
5
|
-
* You can iterate all files in the directory
|
|
6
|
-
*/
|
|
7
|
-
export type FileListDetails = {
|
|
8
|
-
/** Human readable name, should be same to Target.name */
|
|
9
|
-
name: string;
|
|
10
|
-
/** unique path */
|
|
11
|
-
dirName: string;
|
|
12
|
-
dirSize: number;
|
|
13
|
-
/** where to store the file list */
|
|
14
|
-
storageUrl: string;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export enum CategoryFileList {
|
|
18
|
-
FILE_LIST = "file-list",
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface FileList extends Target {
|
|
22
|
-
details: FileListDetails;
|
|
23
|
-
category: CategoryFileList;
|
|
24
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { createRootScope, type LogScope } from "../shared/log";
|
|
2
|
-
|
|
3
|
-
/** Input for {@link scopeForNodeLoop}. */
|
|
4
|
-
export type ScopeForNodeLoopInput = {
|
|
5
|
-
module: string;
|
|
6
|
-
traceId: string;
|
|
7
|
-
nodeId: string;
|
|
8
|
-
traceParentId?: string | null;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
/** Log scope for one node main-loop iteration (trace + nodeId label). */
|
|
12
|
-
export function scopeForNodeLoop(input: ScopeForNodeLoopInput): LogScope {
|
|
13
|
-
const { module, traceId, nodeId, traceParentId = null } = input;
|
|
14
|
-
return createRootScope({ module, traceId, labels: { nodeId }, traceParentId });
|
|
15
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// export const generateControllerTaskPreset = () => {
|
|
2
|
-
// return {
|
|
3
|
-
// category: CategoryTask.TASK_CONTROLLER,
|
|
4
|
-
// taskTypeFilterList: CONTROLLER_TASK_TYPE_ALLOW_LIST,
|
|
5
|
-
// };
|
|
6
|
-
// };
|
|
7
|
-
|
|
8
|
-
// export const getWorkerTaskPreset = () => {
|
|
9
|
-
// return {
|
|
10
|
-
// category: CategoryTask.TASK,
|
|
11
|
-
// taskTypeFilterList: WORKER_TASK_TYPE_ALLOW_LIST,
|
|
12
|
-
// };
|
|
13
|
-
// };
|
package/src/node/trigger-node.ts
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { logManager, type LoggerWithScope } from "../shared/log";
|
|
2
|
-
import { scopeForNodeLoop } from "./node-log-scope";
|
|
3
|
-
import { postTask } from "../task/task-post.api";
|
|
4
|
-
import { TaskStatus } from "../task/task.interface";
|
|
5
|
-
import { patchTriggerFired, scanEnabledTriggers } from "../trigger/trigger.api";
|
|
6
|
-
import type { Trigger, TriggerPostTaskAction } from "../trigger/trigger.interface";
|
|
7
|
-
import { buildFireKey, isTriggerDue } from "../trigger/trigger.utils";
|
|
8
|
-
import { NodeLoopContext } from "./node.interface";
|
|
9
|
-
import { BaseNodeRuntime } from "./node-runtime.base";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Dedicated trigger scheduler node.
|
|
13
|
-
* Main loop: commands → heartbeat → evaluate due triggers → postTask.
|
|
14
|
-
*
|
|
15
|
-
* Phase 1: run a **single** TriggerNode process per deployment to avoid duplicate fires.
|
|
16
|
-
*/
|
|
17
|
-
class TriggerNode extends BaseNodeRuntime {
|
|
18
|
-
constructor() {
|
|
19
|
-
super("triggerNode");
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
protected async onBeforeRegisterNode(logger: LoggerWithScope): Promise<void> {
|
|
23
|
-
logger.info("Trigger 節點啟動,跳過任務註冊", { topic: "trigger" });
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
protected async runLoopSteps(ctx: NodeLoopContext, heartbeatOk: boolean): Promise<void> {
|
|
27
|
-
const loopScope = scopeForNodeLoop({
|
|
28
|
-
module: `${this.runtimeModule}-loop-iteration`,
|
|
29
|
-
traceId: ctx.loopTraceId,
|
|
30
|
-
nodeId: ctx.nodeId,
|
|
31
|
-
});
|
|
32
|
-
if (!heartbeatOk) {
|
|
33
|
-
const { logger } = logManager.withScope(loopScope);
|
|
34
|
-
logger.warn("心跳失敗,本輪跳過 Trigger 評估", { topic: "trigger" });
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
await this.evaluateTriggers(ctx);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async evaluateTriggers(ctx: NodeLoopContext): Promise<void> {
|
|
41
|
-
const { loopTraceId, nodeId } = ctx;
|
|
42
|
-
const loopScope = scopeForNodeLoop({ module: "evaluateTriggers", traceId: loopTraceId, nodeId });
|
|
43
|
-
const { logger } = logManager.withScope(loopScope);
|
|
44
|
-
|
|
45
|
-
logger.debug("開始評估 Trigger", { topic: "trigger" });
|
|
46
|
-
|
|
47
|
-
const { data: triggerList = [], error } = await scanEnabledTriggers({ traceId: loopTraceId });
|
|
48
|
-
if (error) {
|
|
49
|
-
logger.warn("掃描 Trigger 失敗", {
|
|
50
|
-
topic: "trigger",
|
|
51
|
-
data: { error: error.message },
|
|
52
|
-
});
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (triggerList.length === 0) {
|
|
56
|
-
logger.info("無 ENABLED Trigger", { topic: "trigger" });
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const now = new Date();
|
|
61
|
-
let dueCount = 0;
|
|
62
|
-
let firedCount = 0;
|
|
63
|
-
|
|
64
|
-
for (const trigger of triggerList) {
|
|
65
|
-
if (!isTriggerDue(trigger, now)) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
dueCount++;
|
|
69
|
-
const fired = await this.fireTrigger(ctx, trigger, now);
|
|
70
|
-
if (fired) {
|
|
71
|
-
firedCount++;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
logger.info("Trigger 評估完成", {
|
|
76
|
-
topic: "trigger",
|
|
77
|
-
data: {
|
|
78
|
-
scanned: triggerList.length,
|
|
79
|
-
due: dueCount,
|
|
80
|
-
fired: firedCount,
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
private async fireTrigger(ctx: NodeLoopContext, trigger: Trigger, now: Date): Promise<boolean> {
|
|
86
|
-
const { loopTraceId, nodeId } = ctx;
|
|
87
|
-
const { logger } = logManager.withScope(
|
|
88
|
-
scopeForNodeLoop({ module: "fireTrigger", traceId: loopTraceId, nodeId })
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
const fireKey = buildFireKey(trigger, now);
|
|
92
|
-
const action = trigger.details.action;
|
|
93
|
-
|
|
94
|
-
if (action.kind !== "post_task") {
|
|
95
|
-
logger.warn("不支援的 Trigger action", {
|
|
96
|
-
topic: "trigger",
|
|
97
|
-
data: { triggerId: trigger.id, kind: action.kind },
|
|
98
|
-
});
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
logger.info("Trigger 到期,準備 postTask", {
|
|
103
|
-
topic: "trigger",
|
|
104
|
-
data: {
|
|
105
|
-
triggerId: trigger.id,
|
|
106
|
-
triggerKey: trigger.value,
|
|
107
|
-
fireKey,
|
|
108
|
-
taskTypeKey: action.taskTypeKey,
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
const taskExtra = `trigger:${trigger.id}:${fireKey}`;
|
|
113
|
-
const { data: task, error: postError } = await postTask(
|
|
114
|
-
buildPostTaskPayload(trigger, action, taskExtra, loopTraceId)
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
if (postError) {
|
|
118
|
-
logger.error("Trigger postTask 失敗", {
|
|
119
|
-
topic: "trigger",
|
|
120
|
-
data: {
|
|
121
|
-
triggerId: trigger.id,
|
|
122
|
-
fireKey,
|
|
123
|
-
error: postError.message,
|
|
124
|
-
},
|
|
125
|
-
});
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const { error: patchError } = await patchTriggerFired({
|
|
130
|
-
triggerId: trigger.id,
|
|
131
|
-
fireKey,
|
|
132
|
-
expectedLastFireKey: trigger.details.lastFireKey ?? null,
|
|
133
|
-
traceId: loopTraceId,
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
if (patchError) {
|
|
137
|
-
logger.warn("Trigger 已 postTask 但更新 lastFireKey 失敗", {
|
|
138
|
-
topic: "trigger",
|
|
139
|
-
data: {
|
|
140
|
-
triggerId: trigger.id,
|
|
141
|
-
taskId: task?.id,
|
|
142
|
-
fireKey,
|
|
143
|
-
error: patchError.message,
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
logger.success("Trigger 觸發成功", {
|
|
150
|
-
topic: "trigger",
|
|
151
|
-
data: {
|
|
152
|
-
triggerId: trigger.id,
|
|
153
|
-
triggerKey: trigger.value,
|
|
154
|
-
fireKey,
|
|
155
|
-
taskId: task?.id,
|
|
156
|
-
taskTraceId: task?.details.traceId,
|
|
157
|
-
},
|
|
158
|
-
});
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function buildPostTaskPayload(
|
|
164
|
-
trigger: Trigger,
|
|
165
|
-
action: TriggerPostTaskAction,
|
|
166
|
-
extra: string,
|
|
167
|
-
loopTraceId: string
|
|
168
|
-
) {
|
|
169
|
-
return {
|
|
170
|
-
name: action.taskName ?? trigger.name,
|
|
171
|
-
value: action.taskTypeKey,
|
|
172
|
-
params: action.taskParams,
|
|
173
|
-
taskStatus: action.taskStatus ?? TaskStatus.TODO,
|
|
174
|
-
tagList: trigger.tagList ?? [],
|
|
175
|
-
extra,
|
|
176
|
-
traceParentId: loopTraceId,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
export { TriggerNode };
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { createTarget } from "../core.api";
|
|
2
|
-
import { BaseValidator } from "../core.utils";
|
|
3
|
-
import { QuestionList, CategoryQuestionList, QuestionListDetails } from "./question-list.interface";
|
|
4
|
-
|
|
5
|
-
export class PostCreateQuestionListValidator extends BaseValidator<PostCreateQuestionListPayload> {
|
|
6
|
-
protected requiredFields: (keyof PostCreateQuestionListPayload)[] = ["name", "list"];
|
|
7
|
-
protected optionalFields: (keyof PostCreateQuestionListPayload)[] = [];
|
|
8
|
-
|
|
9
|
-
constructor() {
|
|
10
|
-
super();
|
|
11
|
-
// Add custom
|
|
12
|
-
this.addCustomValidator((val) => {
|
|
13
|
-
return true;
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface PostCreateQuestionListPayload {
|
|
19
|
-
name: QuestionListDetails["name"];
|
|
20
|
-
list: QuestionListDetails["list"];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export const postCreateQuestionList = async (payload: PostCreateQuestionListPayload) => {
|
|
24
|
-
return createTarget<QuestionList, PostCreateQuestionListPayload>({
|
|
25
|
-
payload: payload,
|
|
26
|
-
validator: PostCreateQuestionListValidator,
|
|
27
|
-
createFn: (validPayload) => {
|
|
28
|
-
const { name, list } = validPayload;
|
|
29
|
-
const details: QuestionListDetails = {
|
|
30
|
-
name,
|
|
31
|
-
list,
|
|
32
|
-
};
|
|
33
|
-
return {
|
|
34
|
-
name: validPayload.name,
|
|
35
|
-
category: CategoryQuestionList.QUESTION_LIST,
|
|
36
|
-
value: "",
|
|
37
|
-
tagList: [],
|
|
38
|
-
details,
|
|
39
|
-
};
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
};
|